您好我在相同的Header文件中声明了需要彼此的结构。
struct A; // ignored by the compiler
struct B{
A _iNeedA; //Compiler error Here
};
struct A {
B _iNeedB;
};
通常这项工作
class A;
class B{
A _iNeedA;
};
class A {
B _iNeedB;
};
// everything is good
非常感谢!
答案 0 :(得分:7)
这不起作用:A
包含B
包含A
包含B
包含....在哪里停止?
您可以使用指针来建模循环依赖项:
class A;
class B {
A* _iNeedA;
};
class A {
B* _iNeedB;
};
现在这些类彼此不包含,只是相互引用。
此外,您需要注意不能使用尚未定义的内容:在上面的代码中,您已声明了 {{1}在定义A
之前。因此,可以在B
中将指针声明为A
。但在定义之前,你还不能使用 B
。
答案 1 :(得分:0)
我回答我自己的问题。
事实是,我正在做的并不是我发布的内容,但我认为这是同样的事情,实际上我正在使用带参数的运算符。必须在我的结构声明之后定义运算符体(在结构之外), 因为结构B还不知道结构A成员......
我说它正在使用类,因为对于类我们通常使用CPP文件进行方法定义,这里我没有使用任何cpp文件用于我在结构中使用的方法
我即将删除这篇文章,但你们太快了;),
这是一个例子
struct A;
struct B {
int member;
bool operator<(const A& right); //body not defined
};
struct A {
int member;
bool operator<(const B& right)
{
return this->member < B.member;
}
};
bool B::operator<(const A& right) //define the body here after struct A definition
{
return this->member < A.member;
}