Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates C+中的链接器问题+;模板_Templates_Visual C++_Linker - Fatal编程技术网

Templates C+中的链接器问题+;模板

Templates C+中的链接器问题+;模板,templates,visual-c++,linker,Templates,Visual C++,Linker,我在.h文件中有一个函数模板,它包含在我的主文件中,用于创建Excel图表。如果我将模板函数作为非模板方法编写,那么一切都很好。当我将函数设置为函数模板时,函数模板内对Excel命名空间中方法的调用会出现许多未解决的外部符号错误。顺便说一句,这些都在VisualStudio2010中 例如,如果在myFunc.h中 template<class T> void ExcelGraph(const std::vector<T>& xData){ //Calls to

我在.h文件中有一个函数模板,它包含在我的主文件中,用于创建Excel图表。如果我将模板函数作为非模板方法编写,那么一切都很好。当我将函数设置为函数模板时,函数模板内对Excel命名空间中方法的调用会出现许多未解决的外部符号错误。顺便说一句,这些都在VisualStudio2010中

例如,如果在myFunc.h中

template<class T> 
void ExcelGraph(const std::vector<T>& xData){
//Calls to the various methods in the Excel namespace
}
模板
void ExcelGraph(常量std::向量和扩展数据){
//调用Excel命名空间中的各种方法
}
在main.cpp中

 #include"myFunc.h"

 int main(){
 std::vector<float> xData(100,1);
 ExcelGraph(xData);
 }
 #include"myFunc.h"

 int main(){
 std::vector<float> xData(100,1);
 ExcelGraph(xData);
 }
#包括“myFunc.h”
int main(){
std::矢量扩展数据(100,1);
ExcelGraph(扩展数据);
}
然后代码将生成链接器错误。如果myFunc.h如下所示:

void ExcelGraph(const std::vector<float>& xData){
//Calls to the various methods in the Excel namespace
}
void ExcelGraph(常量std::向量和扩展数据){
//调用Excel命名空间中的各种方法
}
在main.cpp中

 #include"myFunc.h"

 int main(){
 std::vector<float> xData(100,1);
 ExcelGraph(xData);
 }
 #include"myFunc.h"

 int main(){
 std::vector<float> xData(100,1);
 ExcelGraph(xData);
 }
#包括“myFunc.h”
int main(){
std::矢量扩展数据(100,1);
ExcelGraph(扩展数据);
}
然后代码编译并运行得很好

链接器错误太多,无法发布,但都是表单错误


1>Excel\u Interface\u Test.obj:错误LNK2019:未解析的外部符号“public:void\u thiscall Excel::\u Chart::PutName(class\u bstr\t)”(?PutName@_Chart@Excel@@QAEXV\u bstr\u t@@@Z)在函数“void\uu cdecl ExcelPlotting::ExcelGraph”中引用(类std::vector const&,类std::vector,类std::basic_string,类std::basic_string,类std::basic_string)“($ExcelGraph@M@“很好吗?”@YAXABV$vector@MV?$allocator@M@std@@@std@@V12@V?$basic_string@DU?$char_traits@D@性病病毒$allocator@D@2@@2@22@Z) 

我们可以看到链接器错误吗?我怀疑(实际上几乎肯定)在第二个示例中,您收到了该向量的临时副本。我已在主帖子中添加了一个错误示例。此错误是否与您认为的@WhozCraig一致?错误来自未链接的Excel命名空间符号(至少看起来是这样的)。代码()没有什么直接的错误。我也不知道第二个代码片段,
std::vector xData(100,1);
是如何编译的。我的错,显然有一个类型名声明,main.cpp的两个版本实际上是相同的。我编辑了第一篇文章