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

时间:2011-05-08 09:27:01

标签: c++ class vector

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中的向量test1时,它可以工作。但是,在插入到A类中的向量之后,我无法获得值。

4 个答案:

答案 0 :(得分:4)

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

离开功能后,您对副本所做的更改将消失。

答案 1 :(得分:3)

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

删除分号。

此外:

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

      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);
      }