Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1335 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas

n°562194
Evadream -​jbd-
Posté le 08-11-2003 à 11:43:27  profilanswer
 

Hello,  
 
Au risque de m'afficher, ca doit être qqchose aussi gros que moi, le code suivant ne compile pas :
 

Code :
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std ;
  4. template< class T >
  5. void afficheVector(const vector<T> &vec) {
  6. vector<T>::const_iterator iter;   // ligne 9
  7. for(iter = vec.begin() ;  iter != vec.end() ; iter++)
  8.  cout << *iter << ' ' ;
  9. cout << endl ;
  10. }
  11. int main(int argc, char* argv[]) {
  12. vector<int> v ;
  13. for (int i = 0 ; i < 10 ; i++)
  14.  v.push_back(i) ;
  15. afficheVector(v) ;
  16. }


 
Voici les erreurs :
 


$ make
g++ -c main.cpp -Wall -pedantic  
main.cpp: In function `void afficheVector(const std::vector<T,  
   std::allocator<_CharT> >& )':
main.cpp:9: syntax error before `;' token
main.cpp: In function `void afficheVector(const std::vector<T,  
   std::allocator<_CharT> >& ) [with T = int]':
main.cpp:24:   instantiated from here
main.cpp:11: `iter' undeclared (first use this function)
main.cpp:11: (Each undeclared identifier is reported only once for each  
   function it appears in.)
make: *** [main.o] Error 1
$  
 


 
Erreur de syntaxe ? Je vois vraiment pas, ou ca fait trop longtemps que je suis devant mon écran.
Par contre, tout passe bien lorsque la ligne 9 devient :
 

Code :
  1. vector<int>::const_iterator iter;   // ligne 9


 
Ce qui a relativement peu d'intérêt [:ddr555]. Il y surement qqchose qui m'a échappé :|
 
Merci à vous !


Message édité par Evadream -jbd- le 08-11-2003 à 16:15:41
mood
Publicité
Posté le 08-11-2003 à 11:43:27  profilanswer
 

n°562195
chrisbk
-
Posté le 08-11-2003 à 11:45:47  profilanswer
 

template< class T >  
void afficheVector<T>(const vector<T> &vec) {


Message édité par chrisbk le 08-11-2003 à 11:46:12
n°562198
Evadream -​jbd-
Posté le 08-11-2003 à 11:50:11  profilanswer
 

Je n'avais jamais vu cette syntaxe, mais ca passe pas non plus, toujours les mêmes erreurs.

n°562200
chrisbk
-
Posté le 08-11-2003 à 11:51:40  profilanswer
 

rah chui con :O
dis donc :O
 
>afficheVector(v) ;  
 
 
skoi de ca ? :O
 
afficheVector<int>(v) ;

n°562204
Evadream -​jbd-
Posté le 08-11-2003 à 11:55:17  profilanswer
 

Ca fonctionne pas :D
 
Toujours cette erreur de syntaxe à la ligne 9 avec une autre à la ligne 8 :
 


main.cpp:8: partial specialization `afficheVector<T>' of function template


 
Et puis ca me semble bizarre de devoir spécifier le type à l'appel dans un cas aussi simple, ou il n'y a pas d'ambiguité, non ?


Message édité par Evadream -jbd- le 08-11-2003 à 11:56:56
n°562206
chrisbk
-
Posté le 08-11-2003 à 11:57:28  profilanswer
 

ben ecoute je viens d'essayer ca compile sous VC++ :D
 
(copier coller de ton code)
 
donc je sais pas :O


Message édité par chrisbk le 08-11-2003 à 11:58:50
n°562208
Evadream -​jbd-
Posté le 08-11-2003 à 12:00:52  profilanswer
 


$ g++ --version
g++ (GCC) 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r2, propolice)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$  


 
Ca viendrait du compilateur à priori alors ? Une syntaxe particulière ou un truc comme çà. Je vais chercher dans cette direction !  
 
Merci de ton intervention !
 
Si qqun d'autre à des propositions, pas de soucis :)
 
@+


Message édité par Evadream -jbd- le 08-11-2003 à 12:01:23
n°562231
Evadream -​jbd-
Posté le 08-11-2003 à 12:44:49  profilanswer
 

Mon code initial compile sans warnings avec gcc/++ 2.96. Je pense que ca provient d'un problème d'include. J'ai reesayé de compiler mon code avec #include <iterator> mais ca fonctionne pas :D

n°562258
Kristoph
Posté le 08-11-2003 à 13:30:07  profilanswer
 

essaye avec
 

Code :
  1. template< typename T >
  2. void afficheVector(const vector<T> &vec) {


 

n°562327
Evadream -​jbd-
Posté le 08-11-2003 à 15:56:20  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <vector>
  3. #include <iterator>
  4. using namespace std ;
  5. template< typename T >
  6. void afficheVector(const vector<T> &vec) {
  7. vector<T>::const_iterator iter; // ligne 9
  8. for(iter = vec.begin() ;  iter != vec.end() ; iter++) {
  9.   cout << *iter << ' ' ;
  10. }
  11. cout << endl ;
  12. }
  13. int main(int argc, char* argv[]) {
  14. vector<int> v ;
  15. for (int i = 0 ; i < 10 ; i++)
  16.  v.push_back(i) ;
  17. afficheVector(v) ;
  18. }


 
Résultat de la compilation :
 


$ make
g++ -c main.cpp -Wall -pedantic  
main.cpp: In function `void afficheVector(const std::vector<T,  
   std::allocator<_CharT> >& )':
main.cpp:9: syntax error before `;' token
main.cpp: In function `void afficheVector(const std::vector<T,  
   std::allocator<_CharT> >& ) [with T = int]':
main.cpp:24:   instantiated from here
main.cpp:11: `iter' undeclared (first use this function)
main.cpp:11: (Each undeclared identifier is reported only once for each  
   function it appears in.)
make: *** [main.o] Error 1
$


 
Still the same :|

mood
Publicité
Posté le 08-11-2003 à 15:56:20  profilanswer
 

n°562621
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 08-11-2003 à 22:58:33  profilanswer
 

Evadream -jbd- a écrit :

Code :
  1. vector<T>::const_iterator iter; // ligne 9



 
la règle: quand on fait référence à un type contenu dans une classe template, il faut toujours mettre typename devant:

Code :
  1. typename vector<T>::const_iterator iter; // ligne 9


 
(le compilo ne peut pas savoir que const_iterator est bien un type et pas autre chose)

n°562628
Evadream -​jbd-
Posté le 08-11-2003 à 23:53:36  profilanswer
 

Whouaou ! C'est exactement çà ! Un grand merci pour l'explication en plus de la solution !
 
@+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas

 

Sujets relatifs
Le javascript du forum ne fonctionne pas bien avec konqueror...Code d'erreur
[PHP] petit prob après passage d'easyPhp à BigApache...template , methode virtuelle et inline
[VBS] Besoin d un petit coup de mainPetit souci avec DevC++
template, main, visual C++Petit pb :( [MàJ]
[PHP] mes variables de sessions ne fonctionne paspetit probleme de break
Plus de sujets relatifs à : [C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR