我是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声明时,会发生错误。我明白,这个问题很可能是因为我不完全理解静态的怪癖。但我还是不明白导致问题的原因,以及如何解决问题。
游戏课程:
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;
};
答案 0 :(得分:0)
_gameState和_mainWindow是Game类的私有成员,因此可能是您访问错误的原因。
要么你需要为Game类创建一个静态构造函数方法,并在那里放置代码问题行,或者你可能根本不需要最后两行。我不知道如何定义sf:RenderWindow类,但可能只需要私有声明。
你的演示应该在某处说一句
Game::Start();