0

可能重复:
什么是未定义的引用/未解决的外部符号错误,我该如何解决?

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

中位数.h

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

中位数.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
4

2 回答 2

1

模板应在使用前由编译器实例化。median.h你有median模板的声明,你有它的实现,但你没有在media.cpp那个文件中使用它,所以模板不会在那个文件中实例化。另一方面,main.cpp您尝试实例化模板,但没有实现,只是声明!所以编译器将无法实例化模板的实现,这就是你的错误的原因。只需使用以下方法将实现移动到median.h或实例化模板median.cpp

template double median<double>(double*, size_t);
于 2012-10-20T18:02:43.113 回答
0

您可以将一个#include "median.cpp"放入您的主文件中,也可以将模板的实现移动到头文件中median.h

于 2012-10-20T17:52:51.430 回答