1

利用した:

typedef struct entity {
    int health;
    int damage;
    SDL_Rect hitbox;
} player, basicEnemy[10];

プレイヤー (および敵) を処理するため。私の問題は、私が得ることです:

error: expected unqualified-id before '-' token

この行 (および 1 つの類似行) の場合:

if( keystate[SDLK_LEFT] )  player.hitbox.x -= 1;

これを修正するにはどうすればよいですか? 構造体に typedef がない場合、エラーは発生しませんが、別のエラーが発生します (これが、typedef を作成した理由です)。

ヘッダー:

#include "SDL.h"
#include "SDL\SDL.h"
#include <string>
4

3 に答える 3

2

typedef型エイリアスを定義します。言うことによって:

typedef struct entity {
    // ...
} player, basicEnemy[10];

あなたが言っています:

struct entity {
    // ...
};

typedef entity player;          // 'player' is an alias for 'entity'.
typedef entity basicEnemy[10];  // 'basicEnemy' is an alias for 'entity[10]'.

あなたが本当に意味するのは、struct宣言と2つのインスタンス定義を作成することです:

struct entity {
    // ...
} player, basicEnemy[10];

この潜在的な混乱を避けるために、それらを分離することをお勧めします。

struct entity {
    // ...
};

entity player, basicEnemy[10];

structインスタンス定義を行わない場合でも、宣言の後にはセミコロンが必要であることに注意してください。

于 2013-07-18T02:47:54.197 に答える
0

インクルードしているヘッダー ファイルに予期せずマクロ (おそらくhitbox?) が定義されている可能性が高く、展開すると構文エラーが発生します。

プリプロセッサを介してコードを実行し、前処理された出力を調べてみてください。-EGCCおよび GCC 互換のコンパイラでは、-c. 例えば:

g++ myfile.cpp -E -o myfile.ii

.ii前処理された C++ ファイルの推奨ファイル拡張子ですが、必須ではありません。そのファイルを見て、エラーが発生している行で何が起こっているかを確認してください。

Visual Studio では、代わりに/Pオプションを使用します。他のコンパイラについては、前処理された出力を確認する方法について、コンパイラのドキュメントを確認してください。

于 2013-07-18T02:26:15.037 に答える