我使用以下簡單文件重現錯誤。字段在前向聲明中具有不完整類型
它說:
領域具有不完全類型 '富'
bar.h:
class Foo;
class Bar{
private:
int x_;
Foo foo_; // error: incomplete type
public:
void setx(int x) {x_ = x;};
void increment(int);
};
class Foo{
public:
void run(int y,Bar& bar) {bar.setx(y);};
};
void Bar::increment(int i){foo_.run(i,*this);}
會員foo_不能是引用或指針。原因是在我的實際代碼中,我無法在Bar的初始化列表中初始化Foo。
要聲明一個類的*實例*,需要該類的完整定義。另一方面,爲了聲明一個參考,一個前向聲明就是所需要的。我建議你嘗試一下你的類和成員函數定義的順序。 –
*我無法在Bar的初始化列表中初始化Foo。*然後您無法在Bar中創建'Foo'的實例。 –