2013-04-16 146 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

相關問題