C ++では、ダブルインクルードに問題があります。
ファイルstuffcollection.h
#pragma once
#ifndef STUFFCOLLECTION_H
#define STUFFCOLLECTION_H
#include "Stage.h"
class Stuffcollection {
public:
bool myfunc( Stage * stage );
};
#endif // STUFFCOLLECTION_H
ファイルstage.h:
#pragma once
#ifndef STAGE_H
#define STAGE_H
#include "Stuffcollection.h"
class Stage {
// stuffcollection used in stage.cpp
};
#endif // STAGE_H
コンパイラエラー:
\Stuffcollection.h|(line were bool myfunc is declared)|error: 'Stage' has not been declared|
||=== Build finished: 1 errors, 0 warnings ===|
誰かがこれが起こる理由とそれを解決する方法を説明できますか?私はすでにインクルードガードとプラグマ一度プリプロセッサディレクティブを使用していますが、それは機能しません。
(stage.hから削除#include "Stuffcollection.h"
し、stage.cppでそれを使用しているそれぞれの行をコメントアウトすると、残りのコードは正常に機能します。Stuffcollectionをステージに含めると、突然機能しなくなります。)
PS:ステージはほんの一例です。私は他のほとんどすべてのファイルでもstuffcollectionを使用しており、この問題が発生するたびに使用しています。
編集:私は提案されたものに従いました、そして今問題はですinvalid use of incomplete type
、すなわち与えられた答えは循環依存の問題を解決しますが、私が扱っている問題を解決しません。私の問題は循環依存/不完全なタイプで続いています。
編集:両方とも解決しました。