C++ C+的叮当链接错误+;静态类:未定义的符号
我有一个静态类,用于我的状态驱动游戏,在使用XCODE编译时,我遇到以下链接器错误:C++ C+的叮当链接错误+;静态类:未定义的符号,c++,xcode,linker,sfml,C++,Xcode,Linker,Sfml,我有一个静态类,用于我的状态驱动游戏,在使用XCODE编译时,我遇到以下链接器错误: Undefined symbols for architecture x86_64: "Game::_gameState", referenced from: Game::Start() in Game.o Game::IsExiting() in Game.o Game::GameLoop() in Game.o "Game::_mainWindow", refer
Undefined symbols for architecture x86_64:
"Game::_gameState", referenced from:
Game::Start() in Game.o
Game::IsExiting() in Game.o
Game::GameLoop() in Game.o
"Game::_mainWindow", referenced from:
Game::Start() in Game.o
Game::GameLoop() in Game.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我对C++的理解很有限,每当我尝试使用它时,我总是发现自己遇到了怪异的怪癖。我不确定如何定义这些符号并将其保持为静态类。我试图在类定义之外定义它们,但运气不佳,我做错了什么
以下是消息来源:
Game.hpp
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
class Game
{
public:
static void Start();
static bool IsExiting();
static void GameLoop();
enum GameState { Uninitialized, ShowingSplash,
Paused, ShowingMenu, Playing, Exiting };
static GameState _gameState;
static sf::RenderWindow _mainWindow;
};
您需要在
类
声明之外定义静态
成员:
在Game.cpp中:
有了所有这些
public
static
方法,也许Game
不应该是类
,而应该是命名空间
我想知道一个所有成员都是静态和公共的类有什么意义。如果这是您想要的,那么只需编写全局函数和全局变量。你甚至可以把游戏变成一个名称空间。我在实验中删除了private子句,试图让它工作。但我把它放回去了。
#include "Game.hpp"
void Game::Start()
{
if(_gameState != Uninitialized)
return;
_mainWindow.create(sf::VideoMode(1024, 768, 32), "This game!");
_mainWindow.setVerticalSyncEnabled(true);
_gameState = Playing;
while(!IsExiting())
{
GameLoop();
}
_mainWindow.close();
}
bool Game::IsExiting()
{
if(_gameState == Exiting)
return true;
else
return false;
}
void Game::GameLoop()
{
sf::Event currentEvent;
while(_mainWindow.pollEvent(currentEvent))
{
switch(_gameState)
{
case Playing:
{
_mainWindow.clear(sf::Color::Black);
_mainWindow.display();
if(currentEvent.type == sf::Event::Closed)
{
_gameState = Game::Exiting;
}
break;
}
}
}
}
Game::GameState Game::_gameState;
sf::RenderWindow Game::_mainWindow;