2010-07-22 57 views
0
#include <list> 
#include <boost/tuple/tuple.hpp> 

template<class InputIterator> 
void f(InputIterator it) 
{ 
    typedef boost::tuple<typename InputIterator::value_type, int> Pair; 
    std::list<Pair> paired; 
    typename std::list<Pair>::const_iterator output; 
    for(output=paired.begin(); output!=paired.end(); ++output) 
    { 
     output->get<1>(); 
    } 
} 

我正在使用此模板函數獲取庫。 GCC 4.1.2(codepad.org)報告以下錯誤:模板函數錯誤(使用Boost.Tuples)

In function 'void f(InputIterator)': 
Line 12: error: expected primary-expression before ')' token 
compilation terminated due to -Wfatal-errors. 

可能更有經驗的人使用模板提供建議?無論是問題還是關鍵短語來研究自己?這讓我陷入困境。

回答

3

因爲get是一個函數模板和output的類型取決於模板參數InputIterator,您需要使用template關鍵字:

output->template get<1>(); 

Comeau C++ Template FAQ有,爲什麼這是必要的一個很好的說明。

+0

呵呵。我甚至不知道這個關鍵詞是否存在(在這種情況下 - 顯然它是最高的)。謝謝。 – 2010-07-22 19:50:12