我在 .h 文件中有一个函数模板,它包含在我的主文件中,用于创建 Excel 图表。如果我将模板函数编写为非模板方法,那么一切都很好。当我将函数设为函数模板时,函数模板中对 Excel 命名空间中的方法的调用会出现许多未解决的外部符号错误。顺便说一下,这一切都在 Visual Studio 2010 中。
例如,如果在 myFunc.h 我有
template<class T>
void ExcelGraph(const std::vector<T>& xData){
//Calls to the various methods in the Excel namespace
}
并在 main.cpp
#include"myFunc.h"
int main(){
std::vector<float> xData(100,1);
ExcelGraph(xData);
}
那么代码将生成链接器错误。如果 myFunc.h 看起来像这样:
void ExcelGraph(const std::vector<float>& xData){
//Calls to the various methods in the Excel namespace
}
并在 main.cpp
#include"myFunc.h"
int main(){
std::vector<float> xData(100,1);
ExcelGraph(xData);
}
然后代码编译并运行得很好。
有太多链接器错误要发布,但它们都是形式
1>Excel_Interface_Test.obj : error LNK2019: unresolved external symbol "public: void __thiscall Excel::_Chart::PutName(class _bstr_t)" (?PutName@_Chart@Excel@@QAEXV_bstr_t@@@Z) referenced in function "void __cdecl ExcelPlotting::ExcelGraph<float>(class std::vector<float,class std::allocator<float> > const &,class std::vector<float,class std::allocator<float> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??$ExcelGraph@M@ExcelPlotting@@YAXABV?$vector@MV?$allocator@M@std@@@std@@V12@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@22@Z)