2

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;
}

PSこれは、コードに別の問題があるために発生しましたが、このおもちゃの例を機能させることさえできなかったので、今ではこれが気になります....

コンパイルして実行に失敗している上記のコードへのリンクは次のとおりです: http://ideone.com/mBJ1Kg

4

1 に答える 1

7

正常に動作します。1から戻るため、ideoneは終了コード1の「ランタイムエラー」を報告しますmain。ゼロ以外の戻りコードは、通常、失敗と見なされます。

行をコメントアウトして次のようreturn x.b_.valueに置き換えるとreturn 0すべて問題ありません。

そこにいくつかの行を入れてstd::cout、何が起こっているのかを確認し、プログラムが機能することを確認することもできます。:D

于 2012-11-09T18:00:14.960 に答える