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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] STL list

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] STL list

n°920734
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 01:08:13  profilanswer
 

je cherche à faire un truc tout simple
 
j'ai une classe représenté par un Tableau de list de TYPE
 
Tableau< list<TYPE> > tab;
 
lorsque j'essaye de me créer un itérateur de list
list<TYPE>::iterator iter;
 
ca merde royalement, avec ce genre d'erreur
error: dependent-name ` std::list<TYPE,std::allocator<_CharT> >::iterator' is parsed as a non-type, but instantiation yields a type
note: say `typename  std::list<TYPE,std::allocator<_CharT> >::iterator' if a type is meant
 
pourtant si je remplace TYPE par int dans la création de l'itérateur, ca fonctionne, alors je me dis qu'il doit manquer quelque chose dans ma classe TYPE (classe Enveloppe en réalité) pour pouvoir me créer mon itérateur

mood
Publicité
Posté le 12-12-2004 à 01:08:13  profilanswer
 

n°920737
chrisbk
-
Posté le 12-12-2004 à 01:17:30  profilanswer
 

refile donc nous un peu plus de contexte

n°920741
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 01:23:30  profilanswer
 

J'ai du construire une classe Tableau qui est un tableau dynamique. Il s'agrandit au besoin et tout le tralala.
 
Là je fais une classe Hachage, qui implante un tableau d'adressage dispersé via un tableau dynamique dont chaque élément est une liste, ceci dans le but de gérer les collisions.
 
Dans ma classe Hachage, j'ai donc:

Code :
  1. template <typename TYPE>
  2. class Hachage {
  3.   private:
  4.     Tableau< list<TYPE> > tab;
  5.   public:
  6.     bool contient(TYPE& t);
  7. };
  8. template <typename TYPE>
  9. bool Hachage<TYPE>::contient(TYPE& t) {
  10.   unsigned int hv(t.hash());
  11.   list<TYPE>::iterator iter;
  12.   return false;
  13. }


 
je veux me créer un itérateur pour parcourir ma liste, et trouver l'élément recherché
 
dans mon cas, je me sers de ma classe Hachage à l'aide d'objet Enveloppe. Une enveloppe est un objet qui contient une clé et une valeur.
 
en parcourant ma liste, je rechercherais donc une enveloppe qui a la même clé que "t", un objet de type Enveloppe lui aussi, qui contient une enveloppe avec une clé mais sans valeur attribué


Message édité par burgergold le 12-12-2004 à 01:24:32
n°920749
Taz
bisounours-codeur
Posté le 12-12-2004 à 02:08:46  profilanswer
 

typename

n°920751
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 02:17:54  profilanswer
 


 
 :??:

n°920758
Taz
bisounours-codeur
Posté le 12-12-2004 à 02:38:50  profilanswer
 

j'en ai marre de faire des sujets que personne ne lit ...

n°920759
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 02:44:21  profilanswer
 

Taz a écrit :

j'en ai marre de faire des sujets que personne ne lit ...


 
si fallait que chacun dise ce dont il a marre de toi...
 
j'avais fait ma recherche sur "list"
 
là jviens de déterrer ton vieux topic sur les typename, jvois pas vraiment  quel est le lien avec mon problème de list :/
 
http://forum.hardware.fr/forum2.ph [...] 0&subcat=0

n°920761
bjone
Insert booze to continue
Posté le 12-12-2004 à 02:57:23  profilanswer
 

je pense que taz te propose un:
 

Code :
  1. 1. template <typename TYPE>
  2.    2. class Hachage {
  3.    3.   private:
  4.    4.     Tableau< list<TYPE> > tab;
  5.    5.   public:
  6.           typedef typename list<TYPE>::iterator list_iterator;
  7.    6.     bool contient(TYPE& t);
  8.    7. };
  9.    8.
  10.    9. template <typename TYPE>
  11.   10. bool Hachage<TYPE>::contient(TYPE& t) {
  12.   11.   unsigned int hv(t.hash());
  13.   12.
  14.   13.   list_iterator iter;
  15.   14.
  16.   15.   return false;
  17.   16. }

n°920763
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 03:01:40  profilanswer
 

bjone a écrit :

je pense que taz te propose un:
 

Code :
  1. 1. template <typename TYPE>
  2.    2. class Hachage {
  3.    3.   private:
  4.    4.     Tableau< list<TYPE> > tab;
  5.    5.   public:
  6.           typedef typename list<TYPE>::iterator list_iterator;
  7.    6.     bool contient(TYPE& t);
  8.    7. };
  9.    8.
  10.    9. template <typename TYPE>
  11.   10. bool Hachage<TYPE>::contient(TYPE& t) {
  12.   11.   unsigned int hv(t.hash());
  13.   12.
  14.   13.   list_iterator iter;
  15.   14.
  16.   15.   return false;
  17.   16. }




 
ahh bien voila, ca compile :)
 
bon maintenant cherchons à comprendre :D
 
en quoi est-ce différent? je comprends ce que le typedef fait, mais jvois pas en quoi c'est différent d'utiliser le tout par à l'aide d'un typedef ou de le faire directement dans ma méthode :/
 
le topic a taz a bien des exemples mais pas vraiment d'explication sur le "pourquoi" utiliser le typedef

n°920765
bjone
Insert booze to continue
Posté le 12-12-2004 à 03:03:46  profilanswer
 

c'est le typename qui permet de dire au compilo "plus tard on aura besoin de ça, même si ça existe pas encore"
 
enfin je comprends l'ensemble typedef/typename comme ça. (définition d'un type à partir d'un type encore non défini)

mood
Publicité
Posté le 12-12-2004 à 03:03:46  profilanswer
 

n°920768
burgergold
5$? va chez l'diable!
Posté le 12-12-2004 à 03:08:50  profilanswer
 

bjone a écrit :

c'est le typename qui permet de dire au compilo "plus tard on aura besoin de ça, même si ça existe pas encore"
 
enfin je comprends l'ensemble typedef/typename comme ça. (définition d'un type à partir d'un type encore non défini)


 
mais encore? pk est-ce que la déclaration de mon itérateur dans la méthode ne peut fonctionner?

n°920770
bjone
Insert booze to continue
Posté le 12-12-2004 à 03:13:46  profilanswer
 

passque il doit y avoir une limite de "cascade" ou "dépendance" (ou je sais pas comment dire) au niveau de l'analyse de la template, ce qui implique que list<TYPE> passe mais list<TYPE>::quelque_chose ne passera pas.
 
je n'ai pas étudié la compilation de template, mais je suppose que le compilo la maintiens d'une certaine manière qu'il doit être capable de pseudo-résoudre les dépendances, et le typename sert à cette pseudo-résolution, en disant "oué là y'a un truc qui existera plus tard".


Message édité par bjone le 12-12-2004 à 03:14:29
n°921764
nathan_g
Posté le 13-12-2004 à 12:46:08  profilanswer
 

Bonjour,
 
j'ai posté récemment des questions sur ce forum au sujet des difficultés que j'avais à utiliser STL avec la version 6.0 de Visual C++. Je n'avais pas ces problèmes avec gcc sous linux, et, d'après ce que j'ai su par la suite, ces problèmes ne se recontraient pas avec la version 7.0 de Visual.
 
Pour mon information, peut tu me dire, Burgergold, quel type de compilateur tu utilises ?

n°921776
burgergold
5$? va chez l'diable!
Posté le 13-12-2004 à 13:00:42  profilanswer
 

c'était avec gcc 3.4.3

n°921782
nathan_g
Posté le 13-12-2004 à 13:13:45  profilanswer
 

Ah, OK, autant pour moi !
Ton problème ne devait donc pas être lié, comme pour moi, au type de compilateur !
Merci de ta réponse.


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

  [C++] STL list

 

Sujets relatifs
"onmouseover" sur une menu listUtilisation de la STL avec Compaq Visual
[C++] conteneur stl & éléments-objets "thread-safe"[Swishmax] Poster un champ sur PHP serveur pour une mailing-list....
Résolu [CSS] Problème de list - display inline[STL]Assurer l'unicité d'un élément dans un container
deux sélections à la fois JScrollPane(list)Images et Mailing List
[C++/STL] for_eachGlade et STL sous Windows
Plus de sujets relatifs à : [C++] STL list


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