C ++结构相互依赖

时间:2010-09-14 11:38:24

标签: c++ syntax struct

您好我在相同的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

非常感谢!

2 个答案:

答案 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;
}