2013-03-25 117 views
0

在頭文件中的我有件事要的效果:實例結構內部類定義生成編譯器錯誤

class MoveableObject 
{ 
    public: 

    static float Gravity; 
    static float JumpSpeed; 
    static float MoveSpeed; 

    struct State; 
    struct Derivative; 

    State current; 
    State previous; 
}; 

當試圖編譯我得到的錯誤:

12:9: error: field 'current' has incomplete type 
13:9: error: field 'previous' has incomplete type 

這可能是一個非常基本的錯誤,但我很難過。謝謝。

+0

向我們展示State'的'的定義,並確保'State'定義之前,它是用過的。 – 2013-03-25 04:07:55

回答

1

向前聲明如:

struct State; 
struct Derivative; 

將爲聲明,如果你操作的指針或引用(因爲編譯器總是知道指針或引用的大小隻工作,但是它不能猜大小一個用戶定義的類型)。

如果您希望保持現在的類不變,您必須包含定義結構狀態的頭文件。

否則,切換到指針!

+0

謝謝!我剛把我的.cpp文件中的定義放入頭文件中。 – Broadi 2013-03-25 04:18:34

0

在問題的代碼中,StateMovableObject中的嵌套類型。爲了能夠創建State類型的成員裏面MovableObjectState定義必須的MovableObject的定義中進行內聯:

class MovableObject { 
public: 
    struct State { ... }; 
    State current; 
};