模板特化导致未定义的引用错误
template specialization causes a undefined reference error
我尝试了像下面这样的模板专业化。
#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)'
你能告诉我如何解决吗?
这不是模板专业化,而是 function template overloading。
第一个重载有两个模板参数,第二个只有一个;当你用两个指定的模板参数调用它时,比如 something<double, double>(0.0);
,第一个将在重载决策中被选择;但它没有定义然后导致 link 错误。
顺便说一句:函数模板只能完全特化,不能部分特化。在大多数情况下 function template overloading 可以很好地完成工作。
我尝试了像下面这样的模板专业化。
#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)'
你能告诉我如何解决吗?
这不是模板专业化,而是 function template overloading。
第一个重载有两个模板参数,第二个只有一个;当你用两个指定的模板参数调用它时,比如 something<double, double>(0.0);
,第一个将在重载决策中被选择;但它没有定义然后导致 link 错误。
顺便说一句:函数模板只能完全特化,不能部分特化。在大多数情况下 function template overloading 可以很好地完成工作。