我有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;
}
P.S。出现这种情况是因为我的代码存在不同的问题,但我甚至无法让这个玩具示例工作,所以现在我有这个让我好奇....
以上是上述代码的链接,该代码正在编译并无法运行:http://ideone.com/mBJ1Kg
答案 0 :(得分:7)
运行正常。 ideone报告“运行时错误”,退出代码为1,因为您从1
返回main
。通常认为非零返回码是失败的。
如果您注释掉return x.b_.value
行,请将其替换为return 0
,然后everything's fine。
您可以在其中放置一些std::cout
行以查看正在发生的事情,并看到该程序有效! :d