从方法返回对向量的引用并使用其公共成员

时间:2010-04-27 04:51:39

标签: c++ stdvector

我有一个向量t_vec,用于存储对类Too实例的引用。代码如下所示。在main中,我有一个向量t_vec_2,其内存地址与B::t_vec相同。

但是当我尝试访问t_vec_2 [0] .val1时,它会给出错误val1 not declared

你可以指出出了什么问题吗?此外,如果您知道从方法返回矢量的更好方法,请告诉我!提前致谢。

class Too {      
      public:             
             Too();
             ~Too(){};
          int val1;
};

Too::Too(){
           val1 = 10;
           };


class B {
      public:
             vector<Too*> t_vec;
             Too*  t1;
             vector<Too*>& get_tvec();
             B(){t1 = new Too();};
             ~B(){delete t1;};
};

vector<Too*>& B::get_tvec(){
    t_vec.push_back(t1);
    return t_vec;
}

int main(){
    B b;
    b = B();
    vector<Too*>& t_vec_2 = b.get_tvec();

    // Getting error    
    std::cout << "\n val1 = " << t_vec_2[0].val1;
    return 0;
}

2 个答案:

答案 0 :(得分:5)

您有2个错误: 第一个已经说过,你应该写

t_vec_2[0]->val1

而不是

t_vec_2[0].val1

第二个是奇怪的路线 b = B();

我认为你应该删除它。 发生错误是因为右侧部分B()将在创建后立即删除。 因此,您不会根据需要获取对象b的10值。只需删除此行,就可以了!

答案 1 :(得分:1)

  

但是当我尝试访问t_vec_2 [0] .val1时,它会给出未声明的错误val1。

那是因为你的向量是持有指针,而不是Too个对象。用箭头(.)运算符替换点(->)运算符,如下所示:

std::cout << "\n val1 = " << t_vec_2[0]->val1;

但作为一般规则,你应该避免让公众成员使用。