2

好吧,标题说明了一切。链接时收到此消息(编译成功):

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>()'

游戏对象.h:

class GameObject
{
    public:
    ...
    template<typename T> T test();
}

游戏对象.cpp:

template<typename T> T GameObject::test()
{

}

Renderer.cpp(使用模板):

object = new GameObject();
...
object->test<void>(); // error here
4

2 回答 2

4

您必须在头文件中定义模板函数,否则编译器将不知道在哪里找到定义而只知道声明,这会给您带来与您所拥有的链接器错误一样的链接器错误。

于 2013-08-19T16:42:06.993 回答
0

您将模板声明为,test()但您试图调用一个名为testas(). 这可能是你的问题。在哪里testas()定义?

于 2013-08-19T16:40:18.723 回答