簡體   English   中英

在C ++中定義枚舉類型的靜態變量

[英]Defining static variable of enum type in c++

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;

現在出現錯誤,該錯誤會首先運行

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

還有其他錯誤,例如函數中的“ Game :: _ gameState”的多個定義,它在Game類中聲明的其他函數中也給出相同的錯誤

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();

}

我不知道這是靜態布爾函數,其他函數也能正常工作,但是這是布爾函數,給我錯誤

GameState枚舉在Game類的范圍內聲明。 因此,當您在該類的范圍之外引用它時,必須使用完全限定的類型名稱(包括定義_gameState字段的實例。我還建議您為其提供一些初始值。例如:

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

希望能幫助到你!

由於enum GameState包含在class Game您需要相應地調整變量的范圍:

Game::GameState Game::_gameState;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM