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

  FORUM HardWare.fr
  Programmation
  C++

  probleme template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme template

n°1041978
manutudesc​end
Posté le 10-04-2005 à 14:57:16  profilanswer
 

bonjour,
je debute en c++ et j'ai un petit probleme avec la compilation des templates ( j'utilise dev C++, donc compilateur gcc si je ne me trompe)  
 
j'ai voulu tester de faire un "extends" de la classe list fournie. mais il me fait un probleme au niveau des iterators.
 

Citation :


ListeObjets.cpp In member function `T* ListeObjets<T>::getObjet(int)':  
17 ListeObjets.cpp expected `;' before "it"
18 ListeObjets.cpp `it' undeclared (first use this function)  
......


 
 
plus precisément voici le code qui pose probleme (le .cpp)
 

Code :
  1. #include <iostream>
  2. #include "ListeObjets.h"
  3. // Constructeur
  4.   template <class T>
  5.   ListeObjets<T>::ListeObjets() {
  6.   }             
  7.   // Destructeur
  8.   template <class T>
  9.   ListeObjets<T>::~ListeObjets(){
  10.   }             
  11.   // Accesseurs
  12.   template <class T>
  13.   T * ListeObjets<T>::getObjet(int numero) {
  14.     list<T>::iterator it = _liste.begin();
  15.     for(int n=numero; n > 0; n--) it++;
  16.     return *it;
  17.   }
  18.  
  19.   // Méthodes
  20.   template <class T>
  21.   void ListeObjets<T>::ajouterObjet(T *o) {
  22.     push_back(o);
  23.   }
  24.  
  25.   template <class T>
  26.   void ListeObjets<T>::retirerObjet(int numero) {
  27.     list<T>::iterator i = _liste.begin();
  28.     for(int n=numero; n > 0; n--) i++;
  29.     _liste.erase(i);
  30.   }


 
 
est ce que j'ai un probleme dans mon code ou est ce que c'est le compilateur gcc qui gere pas les templates ?  
 
 
Merci d'avance

mood
Publicité
Posté le 10-04-2005 à 14:57:16  profilanswer
 

n°1041984
LordHarryP​otter
Posté le 10-04-2005 à 15:03:02  profilanswer
 

Je te dis juste pour visual studio :
Quand tu fais une class template ce dernier refuse le découpage fichier .h déclaration et .cpp définitions
 
Donc sous Visual Studio, tu dois crée ta class et tes focntions dns un .h unique (donc çà fait un gros fichier .h et c'est  tout pas beau :S)

n°1042060
Tarabiscot​e
Posté le 10-04-2005 à 16:18:12  profilanswer
 

La syntaxe correcte est :
typename std::list<T>::iterator it = _liste.begin();

n°1042084
Lam's
Profil: bas.
Posté le 10-04-2005 à 16:47:14  profilanswer
 

C'est ce que j'allais dire (ouais, on dit toujours ça :)). J'ai l'impression que manutudescend a coupé le message d'erreur de gcc qui indiquait qu'il fallait utiliser le mot-clé typename. Comme on l'a vu récemment là:
http://forum.hardware.fr/forum2.ph [...] 1#t1037810

n°1042085
LordHarryP​otter
Posté le 10-04-2005 à 16:48:07  profilanswer
 

Tarabiscote a écrit :

La syntaxe correcte est :
typename std::list<T>::iterator it = _liste.begin();


bien vu  :bounce:  
Sinon tu peux metter après tes includes

Code :
  1. using std::list ;


 
Cela évite de taper "std::" avant chaque occurence de list
Mais dans ces cas là tu t'interdit de définir quoi que ce soit (objet ou variable) de non list

n°1042089
Tarabiscot​e
Posté le 10-04-2005 à 16:53:06  profilanswer
 

Personnellement, je conseil pas trop d'utiliser using dans un fichier d'en-tête.
(ca peut poser problème si ce fichier est inclu un peu partout)

n°1042149
manutudesc​end
Posté le 10-04-2005 à 17:53:47  profilanswer
 

j'ai mis dans le .h using std::list ;
et le message d'erreur n'est pas coupé.
je vais essayer typename stf::list...... mais je doute que ca vienne de la. je vous tiens au courant ;)
merci

n°1042166
skelter
Posté le 10-04-2005 à 18:04:05  profilanswer
 

vous etes sur pour le 'typename' ? Le compilateur connait std::list et sais que iterator est un type membre ?
 
ne mets pas de using dans un entete, et tu es sur d'avoir inclus <list> ?

n°1042222
manutudesc​end
Posté le 10-04-2005 à 18:54:05  profilanswer
 

merci j'ai utilisé la syntaxe  
typename std::list<T>::iterator it = _liste.begin();
et ca marche ;)
merci pour votre aide a tous .

n°1042231
Taz
bisounours-codeur
Posté le 10-04-2005 à 19:08:44  profilanswer
 

c'est pas comme si y avait un topic exprès sur typename


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

  probleme template

 

Sujets relatifs
probleme de pointeur[PHP] problème pour echanger des donnees avec un serveur SOAP
Problème de template? (encore)Listes template : Problème
Problème syntaxique de définition de template pour une fonction membreprobleme template
Probleme spécialisation de templategetline, problème de template ??
Problème de templateProblème C++ => template
Plus de sujets relatifs à : probleme template


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