我有以下课程:
class A {
protected:
A *inner;
public:
....
virtual void doSomething() = 0;
....
}
class B: public A {
...
void doSomething() {
if(inner != NULL)
inner->doSomething();
}
...
}
当我使用inner->doSomething()
时,我遇到了分段错误。
我应该怎么做才能在B班打电话给inner->doSomething()
?
提前感谢。
答案 0 :(得分:9)
如果没有成员内部的显式初始化,它可能既不是NULL也不是指向无效的内存。你能告诉我们明确内部化的代码吗?
A的适当构造函数将是以下
protected:
A() : inner(NULL) {
...
}
答案 1 :(得分:4)
虽然如果你指定A *与B初始化这个指针相同,你会得到一个堆栈溢出...你需要内部的任何理由吗?你不能只调用A :: DoSomething()?