1

最近、別の C++ の問題に出くわし、かなり苦労しました。小さなプログラムがあるとします:

class A {
  public:
    virtual bool c() = 0;
    virtual bool b() = { return false; };
    virtual ~A() {}
}

class B : public A {
   public:
     bool b() = { return true; };
     ~B() {}
}

...

void c(A *pointer) {
  if (pointer->b()) {
    cout << "Derived class";
  }
}

この場合、コンパイラはメソッド c() の「if」行で「不完全な型 A へのメンバー アクセス」というエラーを返します。コンパイラがそのようなエラーを返す理由を誰かが説明してくれますか? そして、例外を発生させることが本当に正しい場合、どうすればそれを防ぐことができますか?

どうもありがとう!

4

1 に答える 1

3

「不完全型A」とは、コンパイルしているコード (ただし、投稿したコードではない) に、 でA使用される前のの定義がないことを意味しcます。cと同じソース ファイル、またはそのソース ファイルからインクルードされたヘッダーに定義が必要です。

于 2013-10-07T12:04:23.367 に答える