1

C++ コードに奇妙な問題があり、何が起こっているのかわかりません。前方宣言とは何かを知っており、それらをいつ使用するかなどを知っています...

ただし、私が持っている C++ プロジェクトでは、インクルード ヘッダーで既に宣言されているクラスを前方宣言する必要があります。こんな感じです

windows.h:

#ifndef WINDOWS_HH_
#define WINDOWS_HH_

#include "foo.h"

class fooC;                 // If I don't forward declare here, won't compile!?
class WindowC
{
     public:
          WindowC();
          ~WindowC();
     public:
          fooC a;
};
#endif

そして、foo.h には fooC の宣言が含まれています。

#ifndef FOO_HH_
#define FOO_HH_
class fooC
{
     public:
            fooC();
            ~fooC();
};
#endif

なぜこれが起こっているのでしょうか?実際のコードは大きなプロジェクトの一部であり、エラーが何であるかを把握するのは非常に困難です...しかし、理論的には fooC の前方宣言は必要ないはずですよね?

4

2 に答える 2

2

このような影響の一般的な原因は、ヘッダー ファイル間の循環依存です。

循環依存関係を作成して (おそらく間接的に)foo.h含めますか?windows.h

于 2012-09-25T17:39:38.697 に答える
0

fooCに直接 (ポインタや参照ではなく) 含まれているため、 とにかくの完全な定義が必要ですWindowC。@joval が言ったように、それは必要ないはずです。どのようなコンパイラ エラーが発生していますか? クラス定義の後にインクルードガードやセミコロンを忘れるなどの単純な間違いを探します。

于 2012-09-25T17:18:32.013 に答える