저는 C++을 처음 사용하고 있으며 일부는 메모리 관리에있어 어려움을 겪고 있습니다. 이것은 나의 첫 번째 프로젝트 중 하나 인 SFML lib 게임입니다. 그래서 나는이 코드에서 액세스 위반 오류 : 코드는 코드의 맨 마지막 줄의 _mainWIndow 선언에 도달 할 때 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;
오류가 발생을 포함한다. 이해가 안되네요. 그 문제는 내가 정적이라는 단점을 완전히 이해하지 못했기 때문에 가장 많이 일어난 것 같습니다. 그러나 나는 아직도 문제를 일으키는 원인과 해결 방법을 이해하지 못하고있다.
게임 클래스 :
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