Ich bin neu in C++, und ich habe Schwierigkeiten, einige seiner Teile zu verstehen, vor allem in der Speicherverwaltung. Dies ist eines meiner ersten Projekte, ein SFML-Lib-Spiel. So erhalte ich eine Zugriffsverletzung Fehler, in diesem Code:C++ Zugriffsverletzung Schreibort
umfassen "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;
Der Fehler tritt auf, wenn der Code auf der allerletzten Zeile Code bekommt, die _mainWIndow Erklärung. Ich verstehe, dass dieses Problem höchstwahrscheinlich passierte, weil ich die Macken der Statik nicht vollständig verstehe. Aber ich verstehe immer noch nicht, was das Problem verursacht und wie man es löst.
The Game Klasse:
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;
};
könnte zum Static Initialisierungsreihenfolge Fiasco bezogen werden. Hängt davon ab, welche SFML-Bibliotheksanforderungen gelten. Wenn es intern mit Statik arbeitet, wäre dieser naive Ansatz mit Statik eine wirklich schlechte Idee. – paddy
Warum sind alle Funktionen statisch? Wenn Sie sie statisch machen, erstellen Sie keine Instanz der Game-Klasse, um die Funktionen aufzurufen. So sollten Sie beispielsweise Game :: IsExistiting(); – Krypton
Meine Vermutung ist, dass das OP bereits Java kennt. – paddy