-1

私はそのような状況にあります

ああ

#ifndef _CLASSA
#define _CLASSA
class B;

class A {
    virtual void addTo(B*) {}
};

#endif

Bh

#ifndef _CLASSB
#define _CLASSB

#include "A.h"

class B : public A {
    B();
    void addTo(B* b) {
         // blah blah blah
    }
};

#endif

B.cpp

#include "B.h"

B::B() : A() {}

main.cpp

#include "B.h"

int main() {
    A* b = new B();
    B* d = new B();
    b->addTo(d);
}

プロジェクトはコンパイルされません。AヘッダーでBを前方宣言すると、コンパイラはBhのクラスの期待値について文句を言います。AhにBhヘッダーを含めると、コンパイラは基本クラスを解決できません。これは可能ですか?

4

1 に答える 1

2

はい、に含めA.hB.h前方宣言BA.hます。

AヘッダーでBを前方宣言すると、コンパイラはBhのクラスの期待値について文句を言います。

あなたが今コードを持っている方法はそれが機能するはずです。Bしかし、実際にはメソッド内で使用していると思われます。addToその場合、前方宣言では不十分です。実装を実装ファイルに分離し、Bそこに含める必要があります。

編集:DeadMgが指摘したように、class B : class A {有効な構文ではありません。おそらく、class B : Aまたはが必要class B : public Aです。

于 2012-07-03T15:53:39.607 に答える