我遇到模板构造函数的问题。我想在没有模板类的构造函数中使用模板,如下所示:
class test {
public:
template <class T>
test(T* obj);
};
template <class T>
test::test(T* obj) {
/* ... */
}
int main() {
int y = 5;
test* o = new test(yy);
delete o;
}
当我尝试在MSVS中构建它时,我收到错误lnk2019
(“未解析的外部符号”)。
我发现解决方案是在头文件中定义构造函数,如下所示:
class test {
public:
template <class T>
test(T* obj) { /* some code here */ };
};
或者像这样:
class test {
public:
template <class T>
test(T* obj);
};
template <class T>
test::test(T* obj) {
/* some code here */
}
是否有在单独的.cpp
文件中编写模板函数的方法?或者我必须在头文件中定义它吗?
答案 0 :(得分:1)
不幸的是,如果你想在模板中使用模板函数(在你的例子中是test.cpp),那么你必须定义函数并在头文件中声明它。