重複の可能性:
Cヘッダーファイルのループ
元の質問:
次のエラーが発生する理由を理解するのにいつも問題がありました。
何か.h
#ifndef SOMETHING_H
#define SOMETHING_H
#include "somethingelse.h"
#endif
somethingelse.h
#ifndef SOMETHINGELSE_H
#define SOMETHINGELSE_H
#include "something.h"
#endif
なぜこれでエラーが発生するのですか?
1)SOMETHING_Hが定義されていません
2)SOMETHING_Hが定義され、somethingelse.hが含まれる
3)SOMETHINGELSE_Hが定義されておらず、定義され、something.hが含まれる
4)SOMETHING_Hが定義されています。#endifにジャンプします。これで終わりですか?
編集:
エラーはまったく発生しません。ただし、以下は行います。
何か.h
#pragma once
#include "somethingelse.h"
class something {
int y;
somethingelse b;
};
somethingelse.h
#pragma once
#include "something.h"
class somethingelse {
something b;
int x;
};
そして、それは論理的です。なぜなら、「somethingelse」がそのクラスのインスタンスを必要とするとき、クラス「something」はまだ定義されていないからです。
この問題は、前方定義によって解決されます。
何か.h
#pragma once
class somethingelse;
class something {
int y;
somethingelse* pB; //note the pointer. Correct me if I'm wrong but I think it cannot be an object because the class is only declared, not defined.
};
.cppに、「somethingelse.h」を含めて、クラスのインスタンスを作成できます。