【问题标题】:Inserting element into vector from different classes将元素插入到来自不同类的向量中
【发布时间】:2011-05-08 09:27:00
【问题描述】:
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 类中的向量后,我无法获得值。

【问题讨论】:

标签: c++ class vector


【解决方案1】:

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

您对副本所做的更改会在您离开该功能后立即消失。

【讨论】:

    【解决方案2】:
    B & insertTest(A element,A element1); {element.test.pushback(element1);}
                                        ^
    

    删除那个分号。

    还有:

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

    【讨论】:

    • 那只是错字。我纠正了它。我实际上是在尝试包含自身的向量。
    • @thetux4:修复传值问题。如果不起作用,请发布真实代码。
    【解决方案3】:

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

    【讨论】:

    • 我在这里写错了语法,但是代码可以编译。我只是给出了相关部分。
    • @thetux4:当您发布代码时,请发布包含您的问题的确切的可编译代码
    【解决方案4】:

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

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

    以下工作,因为您正在修改 test1,它是 this 的成员

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      相关资源
      最近更新 更多