前方宣言に関連していると思われる問題がありますが、おそらくそうではありません。
関連するコードは次のとおりです。
ああ
#ifndef A_H_
#define A_H_
#include "B.h"
class A
{
private:
B b;
public:
A() : b(*this) {}
void bar() {}
};
#endif /*A_H_*/
Bh
#ifndef B_H_
#define B_H_
#include "A.h"
class A;
class B
{
private:
A& a;
public:
B(A& a) : a(a) {}
void foo() { /*a.bar();*/ } //doesn't compile
};
#endif /*B_H_*/
main.cpp
#include "A.h"
int main()
{
A a;
return 0;
}
問題は、A::bar() の呼び出しにあるようです。このメソッドを呼び出そうとすると、次の 2 つのエラーが発生するまで、プログラムは正常にコンパイルされます。
エラー: 不完全なタイプ '構造体 A' の無効な使用</p>
エラー: 'struct A' の前方宣言</p>
これは、両方のヘッダーが相互に参照しているため、 A::bar() がまだ定義または宣言されていないためだと思います。しかし、私はクラスAを宣言し、他に何をする必要があるか途方に暮れています。私はC++が初めてなので、ご容赦ください。この質問に対する答えは、オンラインのどこにも見つかりませんでした。いつものように、事前に感謝します!