template iterator héritage, OK pour visual, Erreurs avec Gcc

template iterator héritage, OK pour visual, Erreurs avec Gcc - C++ - Programmation

Marsh Posté le 06-04-2005 à 12:17:12    

Bonjour,
 
le code est à la fin
ça marche avec Visual C++ 6 et pas avec gcc 3.4.2, désolé j'ai essayé de comprendre avec les header "stl_vector.h" ...etc , mais je suis largué
 
//////////
Messages d'erreur de gcc:
 
/g++.exe -c src/main.cpp -o src/main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"  
src/main.cpp:12: error: expected `;' before "iter"
src/main.cpp: In member function `T papa<T>::prems()':
src/main.cpp:19: error: `iter' undeclared (first use this function)
src/main.cpp:19: error: (Each undeclared identifier is reported only once for each function it appears in.)
 
src/main.cpp: In member function `T fils<T>::premier()':
src/main.cpp:34: error: expected `;' before "iter"
src/main.cpp:35: error: `iter' undeclared (first use this function)
 
src/main.cpp: In member function `T fils<T>::premier() [with T = int]':
src/main.cpp:46:   instantiated from here
src/main.cpp:34: error: dependent-name ` std::vector<T,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
src/main.cpp:34: note: say `typename  std::vector<T,std::allocator<_CharT> >::iterator' if a type is meant/

 

Code :
  1. ////// CODE
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <vector>
  5. #include <iterator>
  6. using namespace std;
  7. ////// CLASS PAPA ////////////////////////////////////////////
  8. template <class T> class papa {
  9.        
  10. protected:
  11.   std::vector<T> liste;
  12.   std::vector<T>::iterator iter;
  13. public:
  14.   inline void add (T elem) {
  15.               liste.push_back(elem);
  16.               };
  17.   inline T prems () {
  18.          iter = liste.begin();
  19.          return *iter;
  20.   };
  21. };
  22. //template <class T> papa::papa(T elem) {
  23. //           liste.push_back(elem);
  24. ////// CLASS FILS ////////////////////////////////////////////
  25. template <class T> class fils : public papa <T> {
  26. public:
  27.                  
  28. inline T premier () {
  29.   std::vector<T>::iterator iter = papa<T>::liste.begin();
  30.   return *iter;
  31. };
  32. };
  33. //// MAIN //////////////////////////////////////////////
  34. int main(int argc, char *argv[])
  35. {
  36.     papa<int> pere;
  37. fils<int> gars;
  38.     pere.add(45);
  39. gars.add(12);
  40. cout << (int) pere.prems() << endl;
  41. cout << (int) gars.premier() << endl;
  42. cout << (int) gars.prems() << endl;
  43. system("PAUSE" );
  44. return 0;
  45. }


Message édité par gilles_paca_aix le 06-04-2005 à 12:19:10
Reply

Marsh Posté le 06-04-2005 à 12:17:12   

Reply

Marsh Posté le 06-04-2005 à 12:19:59    

j'ai édité ton message pour améliorer la lisibilté du code. prends l'habitude d'utiliser les balises cpp et /cpp pour afficher le code stp


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-04-2005 à 17:41:38    

La réponse est dans la question... Ton compilo t'indique ce qu'il ne comprend pas.
Et un rapide google sur "typename" t'en dira plus. Au hasard:
http://publib.boulder.ibm.com/info [...] pename.htm
 
 
 

gilles_paca_aix a écrit :

Bonjour,
 
le code est à la fin
ça marche avec Visual C++ 6 et pas avec gcc 3.4.2, désolé j'ai essayé de comprendre avec les header "stl_vector.h" ...etc , mais je suis largué
 
//////////
Messages d'erreur de gcc:
 
/g++.exe -c src/main.cpp -o src/main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"C:/Dev-Cpp/include/c++/3.4.2/backward"  -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"C:/Dev-Cpp/include/c++/3.4.2"  -I"C:/Dev-Cpp/include"  
src/main.cpp:12: error: expected `;' before "iter"
src/main.cpp: In member function `T papa<T>::prems()':
src/main.cpp:19: error: `iter' undeclared (first use this function)
src/main.cpp:19: error: (Each undeclared identifier is reported only once for each function it appears in.)
 
src/main.cpp: In member function `T fils<T>::premier()':
src/main.cpp:34: error: expected `;' before "iter"
src/main.cpp:35: error: `iter' undeclared (first use this function)
 
src/main.cpp: In member function `T fils<T>::premier() [with T = int]':
src/main.cpp:46:   instantiated from here
src/main.cpp:34: error: dependent-name ` std::vector<T,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
src/main.cpp:34: note: say `typename  std::vector<T,std::allocator<_CharT> >::iterator' if a type is meant/


Message édité par Lam's le 06-04-2005 à 17:42:13
Reply

Sujets relatifs:

Leave a Replay

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