簡體   English   中英

C ++訪問沖突寫入位置

[英]c++ access violation writing location

我是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聲明。 我了解,該問題很可能是因為我不完全了解static的怪癖而發生的。 但是我仍然不明白是什么原因導致了問題,以及如何解決它。

游戲類:

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

_gameState和_mainWindow是Game類的私有成員,因此可能是導致訪問錯誤的原因。

您需要為Game類創建一個靜態構造函數方法,然后將有問題的代碼行放置在此處,或者,也許根本不需要最后兩行。 我不知道sf:RenderWindow類是如何定義的,但也許只需要私有聲明即可。

您的演示應該在某行說

Game::Start();

暫無
暫無

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

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