私は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