带有SFML 2,4的代码::块中未定义的引用 我现在正试图用C++来构建一个小游戏,并结合SFML来完成这个页面的指令: 我一直遇到以下错误: ||=== 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)) ===|

带有SFML 2,4的代码::块中未定义的引用 我现在正试图用C++来构建一个小游戏,并结合SFML来完成这个页面的指令: 我一直遇到以下错误: ||=== 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)) ===|,c++,C++,以下是所有源文件的列表: Pong.cpp #include <iostream> #include "Game.h" int main(int argc, char** argv) { Game::start(); return 0; } #包括 #包括“Game.h” int main(int argc,字符**argv) { 游戏::开始(); 返回0; } Game.cpp #include <iostream> #include "Game

以下是所有源文件的列表:

Pong.cpp

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

int main(int argc, char** argv)
{
    Game::start();
    return 0;
}
#包括
#包括“Game.h”
int main(int argc,字符**argv)
{
游戏::开始();
返回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”
无效游戏::开始(无效)
{
如果(游戏状态!=未初始化)
返回;
创建(sf::VideoMode(1024768,32),“砰!”);
游戏状态=游戏::玩;
而(!IsExit())
{
gameLoop();
}
main window.close();
}
bool Game::isExiting()
{
如果(游戏状态==游戏::退出)
返回true;
其他的
返回false;
}
void Game::gameLoop()
{
sf::Event-currentEvent;
while(mainWindow.pollEvent(currentEvent))
{   
开关(游戏状态)
{
案例游戏::游戏:
{
主窗口。清除(sf::Color(255,0,0));
mainWindow.display();
如果(currentEvent.type==sf::Event::Closed)
{
游戏状态=游戏::退出;
}
打破
}
}
}
}
游戏

#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
#包含ifndef游戏
#定义包含的游戏
#包括
#包括
班级游戏
{
公众:
静态void start();
私人:
静态布尔isExiting();
静态void gameLoop();
枚举游戏状态{未初始化,显示暂停,显示菜单,播放,退出};
静态配子状态;
静态sf::RenderWindow主窗口;
};
#endif//包括游戏

我怎样才能纠正这些错误呢?

让我从这里的评论中得出这个答案。正如@DeiDei已经指出的那样,
游戏状态
主窗口
缺失

实际上,在教程的第2部分页面上提到了它们,就在game.cpp部分的底部:

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

我必须删除下划线才能使其正常工作。

您没有在任何地方定义
gameState
mainWindow
。DeiDei是对的。您错过了教程第2部分中提到的这两行:Game::GameState Game::u GameState=Uninitialized;渲染窗口游戏::_主窗口@马丁:非常感谢你的宝贵帮助。我真傻,竟然没有注意到。不过我仍然有一个问题,在头文件中静态声明变量,并且在源文件中包含头文件,为什么我必须在Game.cpp中重新声明主窗口变量?@DeiDei感谢您及时的回复