2017-07-14 22 views
0

現在、このページの指示にしたがって、SFMLとともにC++を使用して小さなゲームを構築しようとしています。http://www.gamefromscratch.com/page/Game-From-Scratch-CPP-Edition-The-Introduction.aspx 私は次のエラーに実行しておいてください。ここではCode :: Blocks in SFML 2,4

||=== Build: Debug in Pong (compiler: GNU GCC Compiler) ===| 
G:\Ashwin\WIP\Pong\Game.cpp|34|warning: enumeration value 'Uninitialized' not handled in switch [-Wswitch]| 
G:\Ashwin\WIP\Pong\Game.cpp|34|warning: enumeration value 'ShowingSplash' not handled in switch [-Wswitch]| 
G:\Ashwin\WIP\Pong\Game.cpp|34|warning: enumeration value 'Paused' not handled in switch [-Wswitch]| 
G:\Ashwin\WIP\Pong\Game.cpp|34|warning: enumeration value 'ShowingMenu' not handled in switch [-Wswitch]| 
G:\Ashwin\WIP\Pong\Game.cpp|34|warning: enumeration value 'Exiting' not handled in switch [-Wswitch]| 
obj\Debug\Game.o||In function `ZN4Game5startEv':| 
G:\Ashwin\WIP\Pong\Game.cpp|6|undefined reference to `Game::gameState'| 
G:\Ashwin\WIP\Pong\Game.cpp|9|undefined reference to `Game::mainWindow'| 
G:\Ashwin\WIP\Pong\Game.cpp|10|undefined reference to `Game::gameState'| 
G:\Ashwin\WIP\Pong\Game.cpp|17|undefined reference to `Game::mainWindow'| 
obj\Debug\Game.o||In function `ZN4Game9isExitingEv':| 
G:\Ashwin\WIP\Pong\Game.cpp|22|undefined reference to `Game::gameState'| 
obj\Debug\Game.o||In function `ZN4Game8gameLoopEv':| 
G:\Ashwin\WIP\Pong\Game.cpp|34|undefined reference to `Game::gameState'| 
G:\Ashwin\WIP\Pong\Game.cpp|38|undefined reference to `Game::mainWindow'| 
G:\Ashwin\WIP\Pong\Game.cpp|39|undefined reference to `Game::mainWindow'| 
G:\Ashwin\WIP\Pong\Game.cpp|43|undefined reference to `Game::gameState'| 
G:\Ashwin\WIP\Pong\Game.cpp|31|undefined reference to `Game::mainWindow'| 
||error: ld returned 1 exit status| 
||=== Build failed: 11 error(s), 5 warning(s) (0 minute(s), 1 second(s)) ===| 

は、すべてのソースファイルのリストです:

Pong.cpp

#include <iostream> 
#include "Game.h" 

int main(int argc, char** argv) 
{ 
    Game::start(); 
    return 0; 
} 

Game.cpp

#include <iostream> 
#include "Game.h" 

void Game::start(void) 
{ 
     if(gameState != Uninitialized) 
      return; 

     mainWindow.create(sf::VideoMode(1024,768,32),"Pang!"); 
     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,0,0)); 
         mainWindow.display(); 

         if(currentEvent.type == sf::Event::Closed) 
         { 
           gameState = Game::Exiting; 
         } 
        break; 
        } 
      } 
     } 
} 

Game.h

#ifndef GAME_H_INCLUDED 
#define GAME_H_INCLUDED 

#include <SFML/Graphics.hpp> 
#include <SFML/Window.hpp> 

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; 
}; 
#endif // GAME_H_INCLUDED 

これらのエラーを修正するにはどうすればよいですか?

+1

'gameState'と' mainWindow'はどこにも定義されていません。 – DeiDei

+0

デイデイが正しいです。そして、あなたはチュートリアルの第2部ページに記載されている次の2行を見逃しました: Game :: GameState Game :: _ gameState = Uninitialized; sf :: RenderWindowゲーム:: _ mainWindow; –

+0

@MartinSand貴重なご協力をいただきありがとうございます。だから私は愚かなことを気にしないでください。私は依然として疑問を持っていますが、ヘッダファイルに変数が静的に宣言され、ヘッダーファイルがソースファイルに含まれています。なぜGame.cppのmainWindow変数を再宣言する必要がありますか? –

答えて

0

私はこのコメントをここのコメントから入れてください。 @DeiDeiは既にgameStatemainWindowが欠けていると指摘している。

Game::GameState Game::_gameState = Uninitialized; 
sf::RenderWindow Game::_mainWindow; 

私はこの作業を取得するために、アンダースコアを削除する必要がありました:

は実際にそれらが右game.cppセクションの下部に、チュートリアルのパート2ページに記載されています。