嗯,标题说明了一切。链接(编译成功)时收到此消息:
F:/Android/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/
../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.ex
e: ./obj/local/armeabi/objs/hellondk/Player/Renderer.o: in function Renderer::On
SurfaceCreated():jni/Player/Renderer.cpp:63: error: undefined reference to 'void
GameObject::test<void>()'
GameObject.h:
class GameObject
{
public:
...
template<typename T> T test();
}
GameObject.cpp:
template<typename T> T GameObject::test()
{
}
Renderer.cpp(使用模板):
object = new GameObject();
...
object->test<void>(); // error here
答案 0 :(得分:4)
您必须在头文件中定义模板函数,否则编译器将不知道在何处找到定义而只知道声明,这会给您一个链接器错误,就像您所拥有的那样。
答案 1 :(得分:0)
您将模板声明为test()
,但您正在尝试调用名为testas()
的函数。这可能是你的问题。 testas()
定义在哪里?