c++ - 单例实现和对::GetInstance 的 undefined reference

标签 c++ design-patterns linker

我正在尝试实现我在一本书中找到的单例设计模式,我知道我可能不需要在这里使用单例,但除此之外我已经创建了一个 GamePropertiesManager 并且我得到了以下编译(或者更确切地说,链接器?)错误:Main.cpp||对 GamePropertiesManager::GetInstance 的 undefined reference

我正在尝试像这样在我的主要函数中使用我的单例..

#include "GamePropertiesManager.hpp"

..

int main()
{
      GamePropertiesManager::Create();
      GamePropertiesManager::GetInstance()->test();
...
}

我的 GamePropertiesManager 在头文件中是这样定义的:

class GamePropertiesManager
{
   public:
      static GamePropertiesManager* GetInstance();
      static void Create();
      static void Destroy();

      void test();


   protected:
      GamePropertiesManager();
      static GamePropertiesManager* _instance;

      enum GameMode{ PLAYERVSPLAYER, PLAYERVSCOM };
      GameMode _gameMode;
      std::string _player1Name, _player2Name;
      int _player1Score, _player2Score;
      std::string _matchSurvivor;
      int _gameSpeed;

};

并在单独的cpp文件中声明:

#include "GamePropertiesManager.hpp"
//testic
#include <iostream>

GamePropertiesManager* GamePropertiesManager::_instance = NULL;

void GamePropertiesManager::Create()
{
   if (!_instance) //instance not yet created
      _instance = new GamePropertiesManager();
}

void GamePropertiesManager::Destroy()
{
   delete _instance;
   _instance = 0;
}

GamePropertiesManager::GamePropertiesManager() :
   _gameMode(PLAYERVSCOM), _player1Name("Player 1"), _player2Name("Player 2"),
      _player1Score(0), _player2Score(0), _matchSurvivor("NONE"), _gameSpeed(1)
{

}

void GamePropertiesManager::test()
{
   std::cout << "test success!" << std::endl;
}

如果有人可以查看它并解释我做错了什么,我将非常感激!

最佳答案

您已经声明了一个函数 static GamePropertiesManager* GetInstance(); 但没有定义它。实际上,您的 GamePropertiesManager::Create() 完成了大部分工作。如果我是你,我会摆脱它并用:

GamePropertiesManager* GamePropertiesManager::GetInstance()
{
    if (!_instance) //instance not yet created
        _instance = new GamePropertiesManager();

    return _instance;
} 

关于c++ - 单例实现和对::GetInstance 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228680/

相关文章:

C++ - 类型转换错误

c++ - 将 .dll 导入 Qt

C++ 程序已停止工作 LINK LIST

返回最大邻居索引的函数

指向非静态方法的指针的 C++ 有用性

c++ - 导出模板代码 = 危险? (MSVC)

c++ - 如何通过编译错误找到 C++ 复制构造函数的使用位置?

c# - 装饰者模式示例

c - 如何解决链接器库顺序问题?

c++ - 编译后未链接共享对象库