模板无法解析的外部符号

Template unresolved external symbol(s)

本文关键字:外部 符号      更新时间:2023-10-16

我得到这个错误很多,我从来不知道为什么。有人能帮我找出原因吗?

编辑:删除代码

将实现(您的方法定义)与类声明一起放入头文件中(请参阅c++ FAQ)。有些编译器支持"export"关键字来完成您的操作,但在c++ 0x中已被取消。

模板必须在头文件中定义。有关更多信息,请参阅这些常见问题解答:

  • 为什么我不能把模板类的定义从它的声明中分离出来,并把它放在一个。cpp文件中?
  • 我如何避免链接错误与我的模板函数?

这个错误正在发生,因为您的template定义对用户代码不可见。模板定义应该在

中声明
  1. 头文件,与模板一起声明
  2. 在.cpp文件中,其中用户代码使用它。然而在这里方法的定义将是只对使用。的.cpp可见它。参见下面的示例

test.h

template<typename T>
void foo (T*);

test.cpp

int main ()
{
  foo(1);
}
template<typename T>
void foo (T *p)
{
 ...
}

test2.cpp

// This file can not see the definition of foo