无法解析的外部符号与模板函数调用
C++ unresolved extern symbol with template function call
只要我不调用函数,一切都很好,但是一旦我调用函数,我就会得到一个无法解析的外部符号。我所有的类都在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函数类似于这个,但只有当我在代码中调用它们时才一样。
仅供参考,错误为:LNK2019:未解析的外部符号"public: class SSE::GameObject * __thiscall SSE::ObjectManager::ObjectCreate(void)"(??$ObjectCreate@VGameObject@SSE@@ ObjectManager@SSE@ QAEPAVGameObject@1@XZ)在函数_SDL_main中引用C:SDLSimpleStateEngineSSEmain。obj SSE
如果你还需要什么就告诉我,我已经找了好几个小时了
您已经陷入了在cpp文件中定义模板函数的常见陷阱。
你需要在调用代码可以看到的任何地方定义函数,因为只有当它与特定的模板参数一起使用时,它才会被实例化。
你的另一个选择是在你的cpp文件中将它实例化为ObjectCreate<SSE::GameObject>
。
你所做的是定义它如何在ObjectManager.cpp
中实例化,并调用它,就好像它在另一个cpp文件中实例化。
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 删除内联函数调用将导致无法解析的外部符号错误
- 无法解析的外部符号与模板函数调用
- 错误:没有匹配函数调用"min(长期无符号 int&,无符号 int&)"
- Libpng函数调用都是未解析的外部符号