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

それはおそらく非常に基本的な間違いですが、私は困惑しています。ありがとう。

4

2 に答える 2

1

次のような前方宣言:

struct State;
struct Derivative;

ポインターまたは参照を操作する場合にのみ宣言に対して機能します(コンパイラーは常にポインターまたは参照のサイズを知っているためですが、ユーザー定義型のサイズを推測することはできません)。

クラスを現在の状態に保ちたい場合は、構造体Stateが定義されているヘッダーファイルをインクルードする必要があります。

それ以外の場合は、ポインタに切り替えてください。

于 2013-03-25T04:08:22.737 に答える
0

質問のコードでは、Stateは内部にネストされたタイプMovableObjectです。の定義State内にタイプのメンバーを作成できるようにするには、 :の定義内にインライン化する必要があります。MovableObjectStateMovableObject

class MovableObject {
public:
   struct State { ... };
   State current;
};
于 2013-03-25T04:20:06.827 に答える