[英]c++ access violation writing location
我是c ++的新手,我很難理解其中的某些部分,尤其是在內存管理中。 這是我的第一個項目,一個SFML lib游戲。 所以我在此代碼中出現訪問沖突錯誤:
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.