2013-07-18 66 views
1

我用:之前C++ SDL預計不合格-ID ' - ' 令牌

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

來處理我的球員(和對手)。我的問題是,我得到:

error: expected unqualified-id before '-' token 

對於這條線(和一個similiar):

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

我該如何解決這個問題? 如果我沒有上不會發生錯誤的結構類型定義,但另一個人做(這就是爲什麼我做了有類型定義)

頁眉:

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

回答

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

這解決了問題

0

你最有可能有一些宏(可能是hitbox?)在您包含的某個頭文件中意外定義,導致擴展時出現語法錯誤。

嘗試通過預處理器運行您的代碼並查看預處理輸出。使用GCC和GCC兼容的編譯器,可以通過傳遞-E command line flag而不是-c來完成此操作。例如:

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

.ii是預處理C++文件的推薦文件擴展名,但它不是必需的。看看這個文件,看看發生錯誤的線路上發生了什麼。

使用Visual Studio,您可以改爲使用/P option。對於其他編譯器,請查看編譯器的文檔,瞭解如何查看預處理輸出。

+0

我不明白文件的輸出 – lewisjb

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聲明和兩個實例定義:

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

這可能是更好的分離他們,以避免這種潛在的混淆:

struct entity { 
    // ... 
}; 

entity player, basicEnemy[10]; 

請注意,在struct聲明後需要分號,即使它沒有實例定義。

+0

但如果我刪除類型定義,然後我得到這個錯誤:http://stackoverflow.com/questions/17713013/c-sdl -rect-inside-a-struct-does-not-name-a-type – lewisjb

+0

@Pyro:該問題的答案不正確。但是沒有看到你的實際代碼,我不能說真正的問題是什麼。 –

相關問題