gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:25:07 25 4
gpt4 key购买 nike

我正在尝试实现我在一本书中找到的单例设计模式,我知道我可能不需要在这里使用单例,但除此之外我已经创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com