未解决的外部符号,困惑

时间:2012-10-20 17:47:11

标签: c++

  

可能重复:
  What is an undefined reference/unresolved external symbol error and how do I fix it?

我有一个中值函数,可以从数组元素中找到一个中值,如下所示

median.h

template <class N>
N median (N*,size_t);

median.cpp

#include "median.h"
template <class N> 
 N median (N* numbers,size_t size){
    size_t mid = size/2;
    return size % 2 == 0? (numbers[mid] + numbers[mid-1])/2 : numbers[mid];
}

主要

#include <iostream>
#include "median.h"

using namespace std;

int main(){
    double Numbers [] = {1,2,3,4,5,6,7};


    size_t size = sizeof(Numbers)/sizeof(*Numbers);

    double med = median(Numbers,size);
    cout << med << endl;
    return 0;

}

但是我收到以下错误

main.obj : error LNK2019: unresolved external symbol "double __cdecl median<double>(double *,unsigned int)" (??$median@N@@YANPANI@Z) referenced in function _main

2 个答案:

答案 0 :(得分:1)

模板在使用之前应由编译器实例化。在median.h中,您声明了median模板,并且在media.cpp中您已经实现了它,但是您没有在该文件中使用它,因此模板不会在该文件中实例化。在main.cpp的另一边,你尝试实例化模板,但没有实现,只是声明!因此,编译器将无法实例化模板的实现,这是导致错误的原因。只需将实现移至median.h或使用以下内容在median.cpp中实例化模板:

template double median<double>(double*, size_t);

答案 1 :(得分:0)

您可以将#include "median.cpp"放入主页,也可以将模板的实施方式移至标题文件median.h