模板类 - 未解决的外部符号(s)

3
我经常遇到这个错误,但我从来不知道原因。有人可以帮我找出它的原因吗?
注:已删除代码。
3个回答

8
将实现(方法定义)与类声明一起放入头文件中(请参见C++ FAQ中的这个)。有些编译器支持使用“export”关键字来进行操作,但在C++0x中已被取消。

5

2
这些错误是由于您的模板定义对用户代码不可见造成的。模板定义应该在以下地方声明:
  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接