为什么这个子类代码会导致运行时错误?

时间:2012-11-09 17:57:34

标签: c++ oop

我有A扩展的基类XA内部还有另一个类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

1 个答案:

答案 0 :(得分:7)

运行正常。 ideone报告“运行时错误”,退出代码为1,因为您从1返回main。通常认为非零返回码是失败的。

如果您注释掉return x.b_.value行,请将其替换为return 0,然后everything's fine

您可以在其中放置一些std::cout行以查看正在发生的事情,并看到该程序有效! :d