我有这样的类结构
class B;
class A {
private:
B *b;
public:
A(int val) {
b->SetVal(val);
}
};
class B {
private:
int mynum;
public:
B();
void SetVal(int value) {
mynum = value;
}
};
主要:
void main(){
A Head(10);
}
此程序编译但在运行时返回访问冲突。我了解mynum
中的class B
是private
,但即使我公开它也不行。那是为什么?
答案 0 :(得分:2)
您应初始化*b
并在~A()
class A {
private:
B *b;
public:
A(int val) {
b=new B();
b->SetVal(val);
}
~A()
{
if(b)
{
delete b;
b=0;
}
}
};
答案 1 :(得分:0)
您实际上没有将B
指针指向任何位置。因此,当您的构造函数尝试执行b->SetVal(val)
时,您可能会遇到内存访问冲突,并且肯定没有明确定义的行为。
答案 2 :(得分:0)
这与mynum
是私有的这一事实无关。您始终可以从该类的方法访问类的私有成员。