将元素插入到不同类的向量中

Inserting element into vector from different classes

本文关键字:向量 同类 元素 插入      更新时间:2023-10-16
Class A{
public:
      int a;
      vector<A> test;
};
Class B{
public:
      B();
      B(const B &rhs);
      ~B();
      B & insertTest(A element,A element1) {
        element.test.pushback(element1); //doesn't work
      }
      B & insertTest1(A element) {
        test1.pushback(element);//works
      }; 
private:
      vector<A> test1;
};

我正在尝试将元素插入这两个向量。当我将元素插入 B 类的矢量测试1 时,它有效。但是,插入到 A 类向量后我无法获得值。

它在这两种情况下都有效,但是当您按值将element传递给函数时,您只需将新元素插入到此副本中,而不是原始元素中。

离开函数后,您对副本所做的更改将立即消失。

B & insertTest(A element,A element1); {element.test.pushback(element1);}
                                    ^

删除该分号。

也:

  • 正在修改副本,因为您按值传递 - 改为传递A & element, A & element1
  • A 不应该真正包含自身的向量 - 你想在那里做什么?
  • 您没有发布真实代码

按值传递元素;必须通过引用传递元素才能进行任何可见的更改。另外,为什么将函数声明为返回对B的引用而不实际返回任何内容?除此之外,语法是完全错误的,代码甚至不应该编译。

以下内容不起作用,因为元素是按值传递的

      B & insertTest(A element,A element1) {
        element.test.push_back(element1); //doesn't work
      }

由于您正在修改 test1,因此以下内容有效,它是此成员

      B & insertTest1(A element) {
        test1.push_back(element);//works
      }; 

如果您希望第一个工作,请按引用传递元素,如下所示:

      B & insertTest(A& element,A element1) {
        element.test.push_back(element1);
      }