可能重复:
Why should the implementation and the declaration of a template class be in the same header file?
Do template class member function implementations always have to go in the header file in C++?
我在这里犯了一些愚蠢的错误,但我看不清楚。
这个编译:
//start of header.h
namespace ns
{
class A
{
public:
template <class t>t func();
};
template<class t> t A::func()
{
t a;
return a;
}
}
//end of header.h
// imp.cpp的开始
// imp.cpp的结尾
但以下情况并非如此:
//start of header.h
namespace ns
{
class A
{
public:
template <class t>t func();
};
}
//end of header.h
//start of imp.cpp
#include "header.h"
using namespace ns;
template<class t> t A::func()
{
t a;
return a;
}
// imp.cpp的结尾
错误是: 错误LNK2019:函数_main
中引用的未解析的外部符号“public:int __thiscall ns :: A :: func(void)”(?? $ func @ H @ A @ ns @@ QAEHXZ)答案 0 :(得分:2)
模板必须在头文件中实现,因为它们在实例化之前无法编译。
看到这个答案: Why can templates only be implemented in the header file?
答案 1 :(得分:1)
您应该阅读Storing C++ template function definitions in a .CPP file。还有模板特化的其他情况 - 它更像是普通函数(.hpp中的声明,.cpp中的定义)。如果你想在标题中有专门化,你应该记得添加内联(因为ODR)。