可能重复:
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
答案 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