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

标签 c++ oop

我有一个基类 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/

相关文章:

c++ - 如何访问基类的公共(public)数据成员?

python - 构建多模块 Python 程序最 Pythonic 的方法是什么?

java - 在这种情况下,我该如何纠正功能嫉妒?

java - 在 Comparable 接口(interface)中覆盖 compareTo() 的问题

javascript - 当某个对象的原型(prototype)被分配给另一个对象的实例时,获取 Javascript 中对象的类型

c# - 创建一个支持不同单位(摄氏度、华氏度、开尔文)的温度类

c++ - C++11 中的递归 lambda 函数

c++ - 尝试将 boost::stacktrace 添加到 CMake 项目时生成错误

c++ - C函数将原始图像转换为png

c++ - 通过 boost 信号 2 的观察者模式