2010-07-22 62 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>(); 
    } 
} 

Je reçois des bibliothèques avec cette fonction de modèle. Gcc 4.1.2 (codepad.org) signale l'erreur suivante:Erreur dans la fonction du modèle (en utilisant Boost.Tuples)

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

Quelqu'un pourrait-il plus expérimenté avec des modèles offrent des conseils? Soit le problème ou des phrases clés pour me rechercher? Cela m'a coincé.

Répondre

3

Parce que get est un modèle de fonction et le type de output dépend du paramètre du modèle InputIterator, vous devez utiliser le mot-clé template:

output->template get<1>(); 

Le Comeau C++ Template FAQ a une bonne description des raisons pour lesquelles cela est nécessaire.

+0

Huh. Je ne savais même pas que ce mot-clé existait (dans ce contexte, évidemment, c'est en haut). Merci. –