1

我有一个t_vec存储对 class 实例的引用的向量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;
}
4

2 回答 2

5

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

t_vec_2[0]->val1

代替

t_vec_2[0].val1

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

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

于 2010-04-27T05:04:08.590 回答
1

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

那是因为您的向量包含指针,而不是Too对象。将点 ( .) 运算符替换为箭头 ( ->) 运算符,如下所示:

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

不过,作为一般规则,您可能应该完全避免拥有公共成员。

于 2010-04-27T04:57:39.650 回答