[C++] [resolu] Problème de templates

Problème de templates [C++] [resolu] - C++ - Programmation

Marsh Posté le 13-12-2007 à 10:45:40    

voilà j'ai ce code qui utilise un template:

Code :
  1. #include <list>
  2. template<class T>void secondPass(list<T*> child_nodes)
  3. {
  4.     list<T*>::iterator it;
  5.     for (it = child_nodes.begin();it != child_nodes.end();it++)
  6.     {
  7.         /* blabla*/
  8.     }
  9. }


 
et à la compilation sous GCC4.1 j'ai une erreur incompréhensible  :fou: :


 In function ‘void secondPass(std::list<T*, std::allocator<T*> > )’:
5:error: expected `;' before ‘it’
6:error: ‘it’ was not declared in this scope


Bon alors là je suis complétement pommé, je n'ai pas l'habitude de manipuler les templates et je comprends pas ce qui ne va pas.
si j'enlève le template et que je rempalce par un vrai nom de classe il n'y a plus de problème  [:autobot]  
 
Si vous avez une idée faite le savoir  :)  
 :hello:


Message édité par sligor le 13-12-2007 à 11:01:08
Reply

Marsh Posté le 13-12-2007 à 10:45:40   

Reply

Marsh Posté le 13-12-2007 à 10:55:16    

Et où est ton ami typename ;)
 

Code :
  1. #include <list>
  2. template<class T>void secondPass(list<T*> child_nodes)
  3. {
  4.     typename list<T*>::iterator it;
  5.     for (it = child_nodes.begin();it != child_nodes.end();it++)
  6.     {
  7.         /* blabla*/
  8.     }
  9. }


 
Il n'y a aucun moyen au compilateur de savori que list<T*>::iterator est un type. Faut donc
lui dire explicitement via typename :p

Reply

Marsh Posté le 13-12-2007 à 10:56:37    

essaye

Code :
  1. typename list<T*>::iterator it;


http://www.linux-kheops.com/doc/co [...] /x4722.htm

Reply

Marsh Posté le 13-12-2007 à 10:59:09    

ok, ça marche merci beaucoup :)


Message édité par sligor le 13-12-2007 à 11:02:33
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed