2017-07-16 104 views
0

如何使這一點的代碼工作,如果這兩個類聲明在同一個「.h」文件中?如果它們處於不同的狀態,如何使它工作?未聲明類的類成員

簡單的問題,但谷歌搜索沒有幫助我。

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

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

回答

2

正向聲明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

1

遠期聲明是你在找什麼。

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