未声明类的类成员

问题描述:

如何使这一点的代码工作,如果这两个类声明在同一个“.h”文件中?如果它们处于不同的状态,如何使它工作?未声明类的类成员

简单的问题,但谷歌搜索没有帮助我。

class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 

正向声明Container,然后把它定义以后:

class Container; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 

class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 
+0

为什么我不能首先声明Piece,然后在Container上?有没有办法做到这一点不依赖于声明的顺序? – Shocky2

+0

@ shocky2因为'Piece'持有一个指向'Container'的指针,指针允许有一个不完整的类型,但'Container'有一个'Piece'对象,不允许对象不完整。一个不完整的类型是一个已经提前声明的类型。 –

+0

有前向声明,你首先声明Piece ... – CIsForCookies

远期声明是你在找什么。

class Container; 

class Piece 
{ 
    Container* cont; 
public: 
    Piece(Container * c) :cont(c) {}; 
}; 
class Container 
{ 
    Piece p; 
public: 
    Container() :p(this) {}; 
}; 

如果你谷歌,你会发现更多的信息。见下面的一个。

When can I use a forward declaration?

+1

谢谢。不知道它的名字。 – Shocky2