2012-06-08 46 views
1
class Game 
{ 
public: 
    static void Start(); 

private: 
    static bool IsExiting(); 
    static void GameLoop(); 

    static void ShowSplashScreen(); 
    static void ShowMenu(); 

    enum GameState { Uninitialized, ShowingSplash, Paused, 
        ShowingMenu, Playing, Exiting }; 

    Game::GameState Game::_gameState = Game::Uninitialized; 
    static sf::RenderWindow _mainWindow; 
}; 
Game::GameState Game::_gameState; 
RenderWindow Game::_mainWindow; 

錯誤的靜態變量現在是在運行第一定義在C++枚舉類型

void processEvents(){// error: first defined here ??? 
    Event event; 
    while(App.pollEvent(event)){ 
     if(event.type == Event::Closed) 
       App.close(); 
    } 
} 

功能,也有其他的錯誤,如遊戲:: _遊戲狀態的'多重定義」在功能上它給在其他功能上同樣的錯誤,在遊戲類中聲明

void Game::Start(void) { // multiple definition of `Game::_gameState' 
    if (_gameState != Uninitialized) 
     return; 

    _mainWindow.create(VideoMode(1200, 900, 32), "Game", 
      Style::Close); 
    _gameState = Game::ShowingSplash; 

    while (!IsExiting()) { 
     GameLoop(); 
    } 

    _mainWindow.close(); 
} 

我固定的錯誤,但一個更出現了

while (!IsExiting()) { //undefined reference to Game::IsExiting 
    GameLoop(); 
} 

_mainWindow.close(); 

}

我不知道它是靜態布爾功能等功能工作正常,但是這一次是布爾和由於enum GameState包含內class Game給我的錯誤

+0

嘗試'遊戲:: Gamestate'在你的宣言 –

+1

@lstmeyxc,轉貼您獲得作爲一個單獨的問題的錯誤,或更新錯誤所在,現在看到你的問題 – Specksynder

+0

@Itsmeyxc:。我們清楚地不會跟蹤您的編輯和後續問題。這不是一個聊天,沒錯。 – 2012-06-08 15:03:16

回答

2

需要範圍變量相應地:

Game::GameState Game::_gameState; 
+0

我做到了,但它顯示現在更多的錯誤在我編輯的問題中查看 –

+0

您需要將gamestate變量的定義放在代碼(.c或.cpp)文件中,而不是頭文件中。當你在多個文件中包含標題時,它試圖多次定義相同的變量 –

+0

清除幾乎所有的錯誤現在它給了我一個關於對靜態函數的未定義引用我編輯了問題查看 –

4

GameState枚舉在Game類的範圍中聲明。因此,當你引用它是類的範圍之內,你必須使用完全限定的類型名稱(這包括定義_gameState場的情況下我也建議你給它一些初始值,例如:

Game::GameState Game::_gameState = Game::Uninitialized; 

希望它有助於

+0

非常明確的解釋 –

+0

我試過,但給我錯誤在運行的第一個函數看看我編輯它的問題。 –

+0

@Itsmeyxc:現在你有多個定義。這是一個不同的問題,與你的原始問題無關。因此,我建議你就這些新問題提出一個單獨的問題。 – 2012-06-08 15:19:01