模板专业化导致未定义的参考错误

时间:2018-09-07 05:59:15

标签: c++ templates template-specialization

我尝试了以下波纹管专用模板。

#include<iostream>
using namespace std;

template<class T1, class T2>
T1 something(T2 a);

template<class T2>
double something(T2 a){
    double b;
    return b;
}

int main(){
    something<double, double>(0.0);
}

但是,这给了我一个编译错误:

In function `main':
test.cpp:(.text+0x9): undefined reference to `double something<double, double>(double)'

您能告诉我如何解决吗?

1 个答案:

答案 0 :(得分:5)

这不是模板专门化,而是function template overloading

第一个重载有两个模板参数,第二个重载只有一个;当您使用两个指定的模板参数(例如something<double, double>(0.0);)调用它时,将以重载分辨率选择第一个;但未定义则会导致链接错误。


BTW:功能模板只能是full specialized,不能是partial specialized。在大多数情况下,function template overloading会很好地完成工作。