如何使這一點的代碼工作,如果這兩個類聲明在同一個「.h」文件中?如果它們處於不同的狀態,如何使它工作?未聲明類的類成員
簡單的問題,但谷歌搜索沒有幫助我。
class Container
{
Piece p;
public:
Container() :p(this) {};
};
class Piece
{
Container* cont;
public:
Piece(Container * c) :cont(c) {};
};
如何使這一點的代碼工作,如果這兩個類聲明在同一個「.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) {};
};
遠期聲明是你在找什麼。
class Container;
class Piece
{
Container* cont;
public:
Piece(Container * c) :cont(c) {};
};
class Container
{
Piece p;
public:
Container() :p(this) {};
};
如果你谷歌,你會發現更多的信息。見下面的一個。
謝謝。不知道它的名字。 – Shocky2
爲什麼我不能首先聲明Piece,然後在Container上?有沒有辦法做到這一點不依賴於聲明的順序? – Shocky2
@ shocky2因爲'Piece'持有一個指向'Container'的指針,指針允許有一個不完整的類型,但'Container'有一個'Piece'對象,不允許對象不完整。一個不完整的類型是一個已經提前聲明的類型。 –
有前向聲明,你首先聲明Piece ... – CIsForCookies