2008-11-11 6 views

Répondre

18

Vous devez mettre typename en face de cette ligne, car le type que vous faites :: iterator sur dépend du modèle paramètre T. Comme ceci:

template< class T > 
void example() { 
    typename std::list< boost::function<T()> >::iterator it; 
} 

Tenir compte de la ligne

std::list< boost::function<T()> >::iterator * it; 

ce qui pourrait signifier une multiplication, ou un pointeur. C'est pourquoi vous avez besoin de typename pour rendre votre intention claire. Sans cela, le compilateur ne suppose pas un type, et donc il nécessite un opérateur là-bas ou un point-virgule syntaxiquement.


Consultez également la nouvelle entrée FAQ C++ Where to put template and typename on dependent names.

Questions connexes