c ++访问冲突写入位置

时间:2016-10-11 02:39:59

标签: c++ sfml access-violation

我是c ++的新手,我很难理解其中的一些部分,特别是在内存管理方面。这是我的第一个项目之一,一个SFML lib游戏。所以我在这段代码中遇到了访问冲突错误:

包括“Game.h”

void Game::Start()
{
    if (_gameState == Uninitialized)
        return;
    _mainWindow.create(sf::VideoMode(1024, 768, 32), "Hi!");
    _gameState = Game::Playing;

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

    _mainWindow.close();
}

bool Game::IsExiting(){
    if (_gameState == Game::Exiting)
    {
        return true;
    }
    else 
    {
        return false;
    }
}

void Game::GameLoop(){
    sf::Event currentEvent;
    while (_mainWindow.pollEvent(currentEvent))
        {
            switch (_gameState)
            {
            case Game::Playing:
                {
                    _mainWindow.clear(sf::Color(255, 255, 255));
                    _mainWindow.display();

                    if (currentEvent.type == sf::Event::Closed)
                    {
                        _gameState = Game::Exiting;
                    }
                    break;
                }
            }
        }
}

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

当代码到达最后一行代码_mainWIndow声明时,会发生错误。我明白,这个问题很可能是因为我不完全理解静态的怪癖。但我还是不明白导致问题的原因,以及如何解决问题。

游戏课程:

class Game
{
public:
    static void Start();
private:
    static bool IsExiting();
    static void GameLoop();

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

    static GameState _gameState;
    static sf::RenderWindow _mainWindow;
};

1 个答案:

答案 0 :(得分:0)

_gameState和_mainWindow是Game类的私有成员,因此可能是您访问错误的原因。

要么你需要为Game类创建一个静态构造函数方法,并在那里放置代码问题行,或者你可能根本不需要最后两行。我不知道如何定义sf:RenderWindow类,但可能只需要私有声明。

你的演示应该在某处说一句

Game::Start();