2013-04-16 112 views
1

我不知道为什么这不起作用为什么不解决这个模板?

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&) 

的调用是这样的

USSM x1; 
USSM x2; 
NL x3; 
double x4; 
CD x5; 
CV b = calculateCB<USSM, USM>(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); 

和我还实例化模板(作为绝望度量)作为

template<> 
std::vector<CV> calculateCB<USSM,USM>(USSM const & x1, 
             USSM const & x2, 
             NL const & x3, 
             double x4, 
             CD const & x5); 

注意,第二模板参数是在模板的内部使用可变功能。

+2

这不是实例化,这是专门化(实例化,删除''''')。你能发布**完整**编译错误吗? – Angew

+1

您能否提供一个我们可以尝试编译的小例子?另外,我很好奇你在用什么编译器。 –

+0

@Angew:那是一个完整的编译错误。在此之前或之后没有错误。这是唯一的一个。 –

回答

1

我发现了这个问题,它起源于我正在使用的一个类(NL)的一个不正确的前向声明。实际的名字更复杂,而且由于案例不匹配,我无法看到差异。

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

+2

Temaplte错误消息很难做到正确。有时候会有几种可能的原因导致错误,从而导致错误信息导致您朝着正确的方向前进。 –

+0

为了更容易理解模板相关的错误消息,请使用clang而不是g ++。 – Greg

相关问题