gpt4 book ai didi

c++ - 创建我的 Game 类的静态单例会引发链接器错误 2001?

转载 作者:行者123 更新时间:2023-11-30 03:00:33 26 4
gpt4 key购买 nike

链接器错误消息“private: static class Worlds::Game * Worlds::Game::instance”
以下是与错误相关的代码段。

来自Game.h

static Worlds::Game* instance;
static Worlds::Game* getInstance();

来自游戏.cpp

Worlds::Game* instance = 0;

Worlds::Game* Worlds::Game::getInstance()
{
if (instance)
{
return instance;
}
else
{
return instance = new Worlds::Game();
}
}

所以我的问题是为什么我会收到此错误,因为我应该涵盖所有基础以创建我的游戏类的单例?

编辑:

我忘了在 Game.cpp 中添加我所有的 Glut 回调都需要调用 Game 中的函数来做某事。

void onKeyDownCallback(unsigned char key, int mouseX, int mouseY)
void onKeyUpCallback(unsigned char key, int mouseX, int mouseY)
void timerCallback(int value)
void onWindowReshapeCallback(int w,int h)
void onMouseClickedCallback(int button, int state, int mouseX, int mouseY)
void onMouseMovedCallback(int deltaX, int deltaY)
void displayCallback()

最佳答案

static Worlds::Game* instance; - 从标题中删除它。因为 instance 被标记为 static 它被每个翻译单元复制。你得到的实例和翻译的单元一样多。但是你只在一个翻译单元中初始化它

还可以考虑以这种方式实现单例:

Worlds::Game & Worlds::Game::getInstance()
{
static Game instance;
return instance;
}

关于c++ - 创建我的 Game 类的静态单例会引发链接器错误 2001?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11885032/

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