C++ 为什么不是';此模板是否已解决?

C++ 为什么不是';此模板是否已解决?,c++,templates,C++,Templates,我不明白为什么这不起作用 In member function ‘void Test_CB::testCB()’: error: no matching function for call to ‘calculateCB(USSM&, USSM&, NL&, double&, CD&)’ candidate is: template<class T, class V> std::vector<CV> calculateCB(con

我不明白为什么这不起作用

In member function ‘void Test_CB::testCB()’: 
error: no matching function for call to ‘calculateCB(USSM&, USSM&, NL&, double&, CD&)’
candidate is:
template<class T, class V> std::vector<CV> calculateCB(const T&, const T&, const NL&, double, const CD&)
成员函数“void Test_CB::testCB()”中的

错误:调用“CalculateECB(USSM&,USSM&,NL&,double&,CD&)”时没有匹配的函数
候选人是:
模板std::向量计算(常数T&,常数T&,常数NL&,双精度,常数CD&)
电话是这样的

USSM x1;
USSM x2;
NL x3;
double x4;
CD x5;
CV b = calculateCB<USSM, USM>(x1,x2,x3,x4,x5)[0];
ussmx1;
USSM x2;
NL x3;
双x4;
cdx5;
CV b=计算的ECB(x1,x2,x3,x4,x5)[0];
我只是描述了类型。它们是以正确的方式创建或返回的

模板声明为

template <class T, class V>
std::vector<CV> calculateCB(T const & x1,
                            T const & x2,
                            NL const & x3,
                            double x4,
                            CD const & x5);
模板
标准::向量计算(T常数和x1,
T常数和x2,
NL const和x3,
双x4,
CD常数和x5);
我还将模板实例化为

模板
标准::矢量计算(USSM常量和x1,
USSM const和x2,
NL const和x3,
双x4,
CD常数和x5);

请注意,第二个template参数是template函数中内部使用的变量。

我发现了问题,它源于我正在使用的一个类(NL)的错误正向声明。实际名称要复杂得多,由于大小写不匹配,我看不出有什么区别


我认为g++的错误消息至少应该告诉您哪里没有匹配。

这不是实例化,而是专门化(要实例化,请删除
)。你能发布完整的编译错误吗?你能提供一个我们可以尝试编译的小例子吗?另外,我很好奇你在使用什么编译器。@StefanoBorini,你的部分代码在g++4.6.3中编译得很好(但在运行时崩溃)()如果你删除实例化/专门化会发生什么情况?@soon:那是因为
Calculate
没有返回任何东西。Temaplte错误消息很难正确处理。有时错误可能有几个原因,使您无法给出正确方向的错误消息。为了更容易理解与模板相关的错误消息,请使用clang而不是g++。
template<>
std::vector<CV> calculateCB<USSM,USM>(USSM const & x1,
                                      USSM const & x2,
                                      NL const & x3,
                                      double x4,
                                      CD const & x5);