【发布时间】:2017-01-09 07:12:24
【问题描述】:
我知道为什么模板的实现应该到头部的原因。这个问题是关于模板专业化的。据我了解,此设置应该可以工作。
标题:
template<class T>
class Foo {
public:
Foo(T value) {
// not specialized
}
};
template<> Foo<double>::Foo(double value);
cpp:
// specialization for float
template<>
Foo<double>::Foo(double value) {
// special version for double
}
用法:
Foo<double>(0);
但是,我得到一个编译器错误:
error LNK2019: unresolved external symbol "public: __thiscall Foo<double>::Foo<double>(double)" (??0?$Foo@N@@QAE@N@Z) referenced in function _wmain
我做错了什么?还有其他方法可以将专用构造函数移动到实现文件吗?
【问题讨论】:
-
我做错了什么?您很可能在创建可执行文件时没有编译和链接 .cpp 文件中的代码。
-
感谢您的提示,但该文件已包含在二进制文件中。
-
你这是什么意思?
-
我的意思是,我检查了文件并编译并链接到可执行文件中。所以这不是问题。
-
这看起来像是 Visual C++ 编译器中的一个错误。使用 MingW g++ 编译和链接,然后调用该构造函数。
标签: c++ templates constructor template-specialization