0

阅读了许多关于在类上设置模板的链接后,我遇到了这个令人困惑的编译器错误:

Linking...
main.obj : error LNK2019: unresolved external symbol "public: __thiscall test<int,int>::test<int,int>(int)" (??0?$test@HH@@QAE@H@Z) referenced in function _main
fatal error LNK1120: 1 unresolved externals

尽可能简单的违规代码是:

测试.h

template<typename U, typename V>
class test {
public:
    test(int number);
};

测试.cpp

#include "test.h"

template<typename T, typename U>
test<T, U>::test(int number){}

主文件

#include "test.h"

void main() {
    test<int, int> a = test<int, int>(4);
}

显然前面的代码没有任何用处,我只是在构建一个模板模型来启动一个项目。谁能解释一下我对构建此解决方案以达到拥有可以正确构建自身的模板类的目的不了解的地方?

4

3 回答 3

0

将实现移动到标题。

于 2013-10-15T16:44:49.650 回答
0

由于模板的工作方式,您的实现必须在头文件中,而不是在单独的 .cpp 文件中。所以你需要这个:

template<typename U, typename V>
class test {
public:
    test(int number)
    {
    }
};
于 2013-10-15T16:46:06.840 回答
0

除了将实现移动到标题之外,您还可以使用问题中显示的技巧,链接模板定义和单独文件中的声明

于 2013-10-15T16:53:54.647 回答