[英]Clang linking error for C++ static class: undefined symbols
我有一個靜態類,我正在使用我的狀態驅動游戲,在使用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", 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
#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;
}
}
}
}
您需要在class
聲明之外定義static
成員:
Game::GameState Game::_gameState;
sf::RenderWindow Game::_mainWindow;
使用所有這些public
static
方法,也許Game
不應該是class
而是namespace
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.