我是C++的新手,对于部分内存管理我有困难,特别是在内存管理方面。这是我的第一个项目,SFML lib游戏之一。所以我得到一个访问冲突错误,在此代码:C++访问冲突写入位置
包括“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;
};
可能与静态初始化顺序的悲剧。取决于什么是SFML库要求。如果它在内部使用静态,那么这种静态的方法将是一个非常糟糕的主意。 – paddy
为什么所有的功能都是静态的?通过使它们成为静态的,你不需要创建一个Game类的实例来调用函数,例如,你应该如何调用Game :: IsExistiting(); – Krypton
我的猜测是OP已经知道Java。 – paddy