可以帮助我理解我在这个过程中做错了什么,这样我就无法访问我的矢量“vect”
#include <iostream>
#include <vector>
class A
{
private :
public :
A() {}
};
class B
{
private :
std::vector<A*> vect;
public :
B() {}
void func(){
std::cout << vect.size() <<std::endl;
}
};
class C
{
private :
B* b ;
public :
C() { }
void func (){
b->func();
}
};
int main (){
C c;
c.func();
return 0 ;
}
我希望得到“0”作为输出,但似乎矢量没有被加入所以我得到无关的数字“17591314330723”!!!!
答案 0 :(得分:1)
class C
{
private :
B* b ;
public :
C() { }
void func (){
b->func();
}
};
看着这堂课;你可以看到b从未被分配过。除此之外,它是一个指针。这意味着当您致电b->func()
时,您试图在随机内存上调用func()
。这是未定义的行为,你不幸的是它不仅崩溃(因为它隐藏了问题)。
您的选择是将b分配给值;我不打算解释怎么做;你的C ++书应该涵盖那个;或者将其改为不是指针; (即删除*
),这将在您创建C时为您创建新的B.