C ++模板错误?

时间:2016-10-05 17:16:03

标签: c++ templates

我正在尝试学习如何使用模板化的类。我创建了一个简单的模板化类numbers,它包含两个可以是任何数据类型的数字。然后我创建了一个方法,返回对象中两个更大的数字。由于某种原因,我不断收到链接器错误......这是错误和代码。不确定是什么问题,Visual Studio没有在我的代码中强调任何内容。

unresolved external symbol

他们说“未解决的外部符号”,如果它太小而无法阅读。

templated.h

template <class T>
class numbers {
public:
  numbers(T x, T y);
  T bigger();
private:
  T a, b;
};

templated.cpp

#include "templated.h"
#include <iostream>
using namespace std;

template <class T>
numbers<T>::numbers(T x, T y) {
    a = x;
    b = y;
}

template <class T>
T numbers<T>::bigger() {
    return a > b ? a : b;
}

的main.cpp

#include <iostream>
#include "templated.h"
using namespace std;

int main() {

    numbers <int>pair(1, 2);
    cout << pair.bigger() << endl;

    return 0;
}

感谢阅读!

1 个答案:

答案 0 :(得分:3)

您不应该将模板实现放在cpp / c文件中。将它们全部移至.h文件。

这是因为cpp文件应该采用编译成实现库(如dll文件或编译对象)的函数,而模板函数具有未定义类型(尚未),其类型在编译时定义。

但是,您可以将模板函数的特化放在cpp文件中,您可以在其中指定要在编译对象中包含的类型。