5

私はこのタイプのエラーをどこでも見てきました.答えを見ましたが、何も役に立たないようです.

次のコードで次のエラーが発生します。

エラー: 'A' が宣言されていません

Bh:

#include "A.h"
class B{
    public:
         static bool doX(A *a);
};

あ:

include "B.h"
class A{};

私がすでに試したことのチェックリストを実行するには: - 名前のスペルが正しい - A が Ah にある - 名前空間がない - テンプレートがない - マクロがない

私はAをうまく見つけることができる他のクラスを持っています。私が考えることができる唯一のことは、「静的」が問題を引き起こしているということです。

4

2 に答える 2

9

includeを前方宣言に置き換えます。

//B.h
class A;
class B{
    public:
         static bool doX(A *a);
};

必要な場合にのみファイルを含めます。

また、include guards を使用してください。これにより、再定義などの他の厄介な問題を防ぐことができます。

于 2012-12-29T18:50:24.457 に答える
9

相互に含まれる 2 つのヘッダーがある場合、循環依存関係が発生し、プリプロセッサの動作方法により、一方が他方より先に定義されることになります。

修正するには、Bh に Ah を含めないようにし、代わりに前方宣言します。

class A;
class B{
    public:
         static bool doX(A *a);
};

その後、B.cpp に Ah を含めることができます。

于 2012-12-29T18:50:35.890 に答える