代码之家  ›  专栏  ›  技术社区  ›  HiroIshida

模板专门化导致未定义的引用错误

  •  3
  • HiroIshida  · 技术社区  · 8 年前

    我试过贝娄这样的模板。

    #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 回复  |  直到 8 年前
        1
  •  5
  •   songyuanyao    8 年前

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

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


    full specialized ,他们不可能 partial specialized 函数模板重载