我有一个向量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;
}
答案 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;
但作为一般规则,你应该避免让公众成员使用。