簡體   English   中英

Clang鏈接C ++靜態類的錯誤:未定義的符號

[英]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.cpp中:

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

使用所有這些public static方法,也許Game不應該是class而是namespace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM