2013-03-25 64 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; 
};