J'ai un problème étrange avec les modèles. Lorsque vous essayez de passer un itérateur paramétré, il se plaint qu'aucune fonction ne peut être trouvée. L'extrait de code est ici, oublier la fonctionnalité, il utilise la référence à l'itérateur sans canevas ce qui me intéresseComment passez-vous une référence lorsque vous utilisez un nom de type comme argument de fonction en C++?
#include <list>
#include <iostream>
template<typename T>
void print_list_element(typename std::list<T>::iterator& it){
std::cout << *it << std::endl;
}
int main() {
std::list<int> theList;
theList.push_back(1);
std::list<int>::iterator it = theList.begin();
print_list_element(it);
return 0;
}
Si vous essayez de compiler ce avec g ++ v4.3.2, il se plaint d'un message disant que:
main.cpp:14: error: no matching function for call to 'print_list_element(std::_List_iterator<int>&)'
Y at-il un problème avec le code que j'ai écrit ou est-ce que g ++ a besoin de plus d'informations?
Je pense que la partie appropriée de la norme '03 est: 14.8.2.4/4. La norme dit aussi que c'est un «contexte non déduit», plutôt que votre formulation ci-dessus. –