私は現在、多くのクラスを含むプロジェクトに取り組んでおり、次のようなものを含める必要がある場合があります:
Player.h の CSConnection.h と CSConnection.h の Player.h で、コンパイラがクラス名が定義されていないなどの競合を起こしました。
ヘッダーにはガードがありましたが、どこに問題がありますか?
私は現在、多くのクラスを含むプロジェクトに取り組んでおり、次のようなものを含める必要がある場合があります:
Player.h の CSConnection.h と CSConnection.h の Player.h で、コンパイラがクラス名が定義されていないなどの競合を起こしました。
ヘッダーにはガードがありましたが、どこに問題がありますか?
循環依存は単に悪い設計です。子/所有オブジェクトにその親/所有者を「認識」させたい場合は、所有者への完全な参照ではなく、子に std::function を渡す必要があります。
前方宣言 - http://en.wikipedia.org/wiki/Forward_declarationを参照 するか、おそらくガード「つまり #ifdef ...」の使用 - http://en.wikipedia.org/wiki/Include_guard
インクルード ガードは、ファイルが同じファイル内に複数回インクルードされるのを防ぎますが、循環的なインクルードには役立ちません。おそらく必要なのは前方宣言ですが、それはインクルードファイルの内容によって異なります。