我有一个问题,我认为它与前向声明有关,但也许不只是。
这是相关的代码:
A.h (这是无法被翻译的字符或字符串,请提供更具体的内容或上下文。)
#ifndef A_H_
#define A_H_
#include "抱歉,这个信息无法翻译,因为它缺乏上下文。"
class A
{
private:
B b;
public:
A() : b(*this) {}
void bar() {}
};
#endif /*A_H_*/
抱歉,这个信息无法翻译,因为它缺乏上下文。
#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_*/
主要.cpp
#include "A.h (这是无法被翻译的字符或字符串,请提供更具体的内容或上下文。)"
int main()
{
A a;
return 0;
}
问题似乎出在A :: bar ()的调用上。 程序成功编译,直到我尝试调用此方法,在这一点上,我收到两个错误:
错误:不完整类型“struct A”的无效使用
错误:结构体A的前向声明
我猜测这是因为A::bar()还未被定义或声明,因为两个头文件互相引用。然而,我前向声明了类A,但不知道还需要做什么。我对C++还不太熟悉,请见谅。我在其他任何地方都找不到这个问题的答案。提前感谢!