我有一个基类 A
,我正在使用 X
对其进行扩展。 A
内部还有另一个类,B
。似乎没有定义虚方法,但我不明白为什么?
class A {
public:
class B {public: bool value;};
A() {}
B b_;
void DoStuff(B& b);
private:
virtual void DoStuffImpl(B& b) = 0;
};
class X : public A {
public:
X() {}
void Trigger();
private:
virtual void DoStuffImpl(B& b);
};
void A::DoStuff(B& b) {
DoStuffImpl(b);
}
void X::Trigger() {
DoStuff(b_);
}
void X::DoStuffImpl(B& b) {
b.value = true;
}
int main(){
X x;
x.Trigger();
return x.b_.value;
}
附言这是因为我的代码有一个不同的问题,但我什至无法使这个玩具示例工作,所以现在我对此感到好奇....
这里是上面代码的链接,正在编译运行失败:http://ideone.com/mBJ1Kg
最佳答案
运行良好。 ideone 报告“运行时错误”,退出代码为 1,因为您从 main
返回了 1
。非零返回码通常被认为是失败的。
如果您注释掉 return x.b_.value
行并将其替换为 return 0
,则 everything's fine .
您可以在其中放置一些 std::cout
行以查看发生了什么,并查看程序是否正常运行! :D
关于c++ - 为什么这个子类代码会导致运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13313428/