只要我不调用该函数,一切都很好,但是一旦我调用该函数,我就会得到一个未解析的外部符号。我所有的类都在 SSE 命名空间(我自己的)中,并且到目前为止运行良好。让我展示。
#include "SDL.h"
#include "Game.h"
#include "GameObject.h"
#include <tchar.h>
SSE::Game Pong;
int _tmain(int argc, char* argv[])
{
SSE::GameObject* object;
Pong.Initialize("Pong!");
object = Pong.Objects().ObjectCreate<SSE::GameObject>();
while (!Pong.bQuit)
{
Pong.Update();
Pong.Draw();
}
return 0;
}
这是我调用函数的地方。Game 是一个为我运行幕后工作的类(该类一切正常),Game.Objects() 返回负责创建和删除对象以及为对象提供组件的 Game 的 ObjectManager。ObjectCreate 是一个模板函数,它返回一个指向创建的新对象的指针。
从 ObjectManager 的 .cpp 文件中:
template <class G>G* ObjectManager::ObjectCreate()
{
ObjectList* tempObjList;
tempObjList = new tempObjList();
tempObjList->objectType = G->ClassName();
tempObjList->objectTypeNumber = 0;
for (unsigned int i = 0; i < v_objList.size(); i++;)
{
if (v_objList[i]->objectType == tempObjList->objectType)
tempObjList->objectTypeNumber++;
}
tempObjList->gameObject = new G(tempObjList->objectType + "_" + tempObjList->objectTypeNumber);
v_objList.push_back(tempObjList);
if (v_objList.back() != tempObjList)
{
delete tempObjList;
return NULL;
}
return v_objList.back();
}
这会为新的 GameObject 分配一个唯一的名称并在内存中创建它,然后将其存储到一个向量中。另一件要提的事情是,对于许多与此类似的 ObjectManager 和 GameObject 函数,我都遇到了这个未解决的外部符号错误,但只有当我在代码中调用它们时才会出现相同的情况。
仅供参考,错误为:Error 2 error LNK2019: unresolved external symbol "public: class SSE::GameObject * __thiscall SSE::ObjectManager::ObjectCreate(void)" (??$ObjectCreate@VGameObject@SSE@@@ObjectManager @SSE@@QAEPAVGameObject@1@XZ) 在函数 _SDL_main C:\SDL\SimpleStateEngine\SSE\main.obj SSE 中引用
如果您需要其他任何东西,请告诉我,我一直在寻找几个小时。