ここですでに質問されているほとんどのものとは異なる循環ヘッダーの問題があります。相互に依存しているがメンバーとしては依存していない 2 つのクラスがあるため、コンパイラがクラスのサイズを計算できないという問題に遭遇しないでください。そのため、前方宣言を使用してサイクルを断ち切ることができます。
ただし、クライアントがクラスを使用するためにこれらのヘッダーを両方とも含める必要はありません。ユーザーがこの依存関係を意識する必要がないように、ヘッダーは自己完結型である必要があります。これを行う方法はありますか?
編集:注意が必要なのは、 A と B をヘッダーのみで定義する必要があることです。
ヘッダー A.hpp 内
#ifndef A_HPP
#define A_HPP
#include "B.hpp"
struct A
{
B foo() { ... }
};
#endif
ヘッダー内 B.hpp
#ifndef B_HPP
#define B_HPP
struct A;
struct B
{
void bar()
{
A a = A();
...
}
};
#endif
main.cpp で
#include "B.hpp"
B().bar(); // error: 'a' uses undefined class 'A'