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;

エラーは最初に実行される関数にあります

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

エラーを修正しましたが、もう1つ表示されました

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

_mainWindow.close();

}

私はそれが静的ブール関数であるとは知りません他の関数は正常に動作しますが、これはブール関数であり、エラーが発生します

4

2 に答える 2

4

GameStateenum はGameクラスのスコープで宣言されています。したがって、そのクラスのスコープ外で参照する場合は、完全修飾型名を使用する必要があります (これには_gameStateフィールドのインスタンスの定義が含まれます。初期値を与えることもお勧めします。例:

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

それが役に立てば幸い!

于 2012-06-08T14:47:48.730 に答える
2

enum GameStateが含まれているため、class Gameそれに応じて変数のスコープを設定する必要があります。

Game::GameState Game::_gameState;
于 2012-06-08T14:46:35.233 に答える