typedef montype<T> monnouveautypegenerique ??

typedef montype<T> monnouveautypegenerique ?? - C++ - Programmation

Marsh Posté le 09-11-2008 à 15:04:07    

Bonjours à tous,
 
Voila je rencontre un petit probleme.
J'ai une classe generique de type "montype<T>".
Je souhaite à present dans une autre classe creer une lsite d'instance montype.
 
Le compilateur accepte la syntaxe suivante:
std::list<montype<T> > listeDeMonType;
 
Mais lorsque je veux parcourir cette liste en creant un iterateur j'ai un erreure:
std::list<montype<T> >::const_iterator lit=listeDeMonType.begin();   "expected `;' before ‘lit’"
 
J'essaye à present de contourner le probleme en utilisant un typedef generique qui ressemblerait à ca:
typedef montype<T> monnouveautypegenerique
 
Biensur ca ne fonctionne pas aussi je voudrais savoir si l'un de vous aurait une solution à ce probleme?
 
Merci

Reply

Marsh Posté le 09-11-2008 à 15:04:07   

Reply

Marsh Posté le 09-11-2008 à 15:07:17    

mot-clé typename :o
 

Code :
  1. typedef typename montype<T> monnouveautypegenerique;

Reply

Marsh Posté le 09-11-2008 à 15:21:05    

Salut,
 
merci de prendre le temps de repondre :D .
 
Lorsque je met ce que tu m'a indiqué, j'ai cette erreur du compilateur:
 
 error: expected nested-name-specifier
 error: invalid declarator before ‘monnouveautypegenerique’
 
Une idée?
 
je precise que c'est à l'interieur d'une template <class T> et que j'ai mis le type def dans la classe, sinon j'avais les erreurs suivante:
 
error: using ‘typename’ outside of template
error: ‘T’ was not declared in this scope
error: template argument 1 is invalid
error: expected nested-name-specifier
 
merci.

Reply

Marsh Posté le 09-11-2008 à 15:49:03    

pas d'idée? :sweat:

Reply

Marsh Posté le 09-11-2008 à 15:50:04    

donne ton code

Reply

Marsh Posté le 09-11-2008 à 15:59:52    

Salut, merci à toi.
Voila la partie du code concernée par le souci.  
Si par ailleurs il y a une autre facon de gerer ca, je suis ouvert;
c'est jusqte que celle-ci me semble etre faite pour ce genre de cas.
 
 

Citation :

/*
 
#ifndef BAN_H
#define BAN_H
 
#include<iostream>
#include<list>
#include"CompteEnBanque.h"
 
 
template<class T> class Banque{
 
 protected:
  typedef typename CompteEnBanque<T> CpteBque;
  std::list<CompteEnBanque<T> > listeComptes;
 /* que j'aimerai remplacer par std::list<CpteBque>::const_iterator lit=listeComptes.begin(); */
{...}
 
   
 
 public:
  Banque();
 
{...}
  std::string listeClientEtiquette();
 
 
 
};
{...}  
 
template<class T>  
 std::string Banque<T>::listeClientEtiquette(){
  std::list<CompteEnBanque<T> >::const_iterator lit=listeComptes.begin();  
 /* que j'aimerai remplacer par std::list<CpteBque >::const_iterator lit=listeComptes.begin(); */
  std::ostringstream s;
   
  while(lit!=listeComptes.end()){
   {...}
  }
  return s;
 }  
 
#endif


 
 
edit:
 
je precise que l'erreur de nested-name est obtenue une fois que j'ai remplacé par CompteEnBanque<T> par CmpteBque à l'initialisation de la liste...


Message édité par durk le 10-11-2008 à 11:58:59
Reply

Marsh Posté le 09-11-2008 à 16:22:15    

faut aussi le mettre ou il faut :o
 

Code :
  1. typename std::list<CompteEnBanque<T> >::const_iterator lit=listeComptes.begin();

Reply

Marsh Posté le 09-11-2008 à 16:32:57    

ca passe :whistle: .
 
ca peut paraitre evident une fois qu'on connait, mais avant :sweat: .
 
Grand merci! :jap:

Reply

Marsh Posté le 10-11-2008 à 09:56:03    

durk a écrit :

ca passe :whistle: .
 
ca peut paraitre evident une fois qu'on connait, mais avant :sweat: .
 
Grand merci! :jap:


 
Bah c'est le niveau 1 de la bonne maitrise des patrons. Si on t'enseigne pas ça tout de suite, paye ton désastre car les types dépendants, c'ets la quintessence du template.

Reply

Sujets relatifs:

Leave a Replay

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