【问题标题】:LNK 2001 Unresolved External Symbol on Singleton [duplicate]单例上的 LNK 2001 未解析的外部符号 [重复]
【发布时间】:2015-03-24 18:54:06
【问题描述】:

我正在使用 SFML 和 Box2D 创建一个类似 peggle 的游戏,但我的游戏单例出现此错误。

错误 1 ​​错误 LNK2001:无法解析的外部符号“私有:静态类 Game * Game::s_pInstance”(?s_pInstance@Game@@0PAV1@A) C:\Users\UserName\Desktop\PeggleClone\Maze\Maze\Game .obj

Main.cpp

#include "Game.h"
#define SCALE 30.0f
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600   

int _tmain(int argc, _TCHAR* argv[])
{
    Game* game = Game::GetInstance();

    game->Initialize(WINDOW_WIDTH, WINDOW_HEIGHT);

    //Stuff for timesteps
    float timenow = (float)GetTickCount();
    float timethen = (float)GetTickCount();
    float timeelapsed = 0.0f;


    while (true)
    {
        timeelapsed = (float)(timenow - timethen) / 1000.0f;

        if(game->Update(timeelapsed) < 0)
            break;
        game->Render();


        timethen = timenow;
        timenow = (float)GetTickCount();
    }

    game->Terminate();
    game->DeleteInstance();
    return 0;
}

游戏.h

#pragma once


class BaseGameState;
class Game
{
public:
    void Initialize();


    /**********************************************************/
    // Singleton Accessors:
    static Game*    GetInstance     ( void );
    static void     DeleteInstance  ( void );


    /**********************************************************/
    // Setup, Play, Cleanup:
    bool Initialize ( unsigned int width, unsigned int height );
    int  Update     ( float elapsedTime );
    void Render     ( void );
    void Terminate  ( void );

    unsigned int GetWidth() {return m_uWidth;}
    unsigned int GetHeight() {return m_uHeight; }
    sf::RenderWindow* GetWindow() {return gameWindow;}


private:

    /**********************************************************/
    // Singleton Object:
    static Game*    s_pInstance;

    Game(void) = default;
    ~Game(void) = default;
    Game(const Game&) = delete; // copy constructor
    Game& operator= (const Game&) = delete; // assignment operator


    /**********************************************************/
    // Game State Machine:
    //  - can ONLY be called by the state's Input, Update, or Render methods!!!
    void PushState(BaseGameState* pNewState);
    void PopState(BaseGameState* pNewState);
    void ClearState(BaseGameState* pNewState);
    vector<BaseGameState*> m_vStates;




    // Window stuff
    unsigned int m_uWidth, m_uHeight;

    sf::RenderWindow* gameWindow;
};

游戏.cpp

#include "stdafx.h"
#include "Game.h"
#include "BaseGameState.h"
#include "MainMenuState.h"



bool Game::Initialize(unsigned int width, unsigned int height)
{
    // Set up render window
    gameWindow = new sf::RenderWindow(sf::VideoMode(width, height), "Peggle Ripoff");

    // Clear state machine
    m_vStates.clear();

    //Start on main menu
    PushState(MainMenuState::GetInstance());

    return true;
}

Game* Game::GetInstance( void )
{
    if( s_pInstance == nullptr )
        s_pInstance = new Game;

    return s_pInstance;
}

void Game::DeleteInstance( void )
{
    delete s_pInstance;
    s_pInstance = nullptr;
}

【问题讨论】:

标签: c++ linker singleton game-engine


【解决方案1】:

修复它,我需要通过在 Game.cpp 顶部添加这一行来初始化游戏实例

Game* Game::s_pInstance = nullptr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2019-02-26
    • 2016-06-02
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多