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

  FORUM HardWare.fr
  Programmation
  C++

  fonction retournant une instance de classe template

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction retournant une instance de classe template

n°1171224
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 04:44:40  profilanswer
 

Salut,
 
Je bloque là-dessus depuis un moment et je ne vois pas ce qui cloche. Voilà ma fonction (raccourcie à son plus simple effet pour montrer le problème) :

Code :
  1. pt::tstrlist<int> traite() {
  2. pt::tstrlist<int> res(SL_SORTED);
  3. return res;
  4. }


 
Avec VC6, lorsque je lance la compilation, j'obtiens :

Code :
  1. d:\Documents\Programmes\FreeBrowserSDK-0.6\fb_notes\fb_notes.cpp(34): error C2558: class 'pt::tstrlist<X>' : pas de constructeur de copie disponible ou le constructeur de copie est déclaré 'explicit'
  2.         with
  3.         [
  4.             X=int
  5.         ]


 
Pour info, pt est le namespace de ptypes et on peut trouver la doc de la classe pt::tstrlist ici, dont voici la définition :

Code :
  1. template <class X> class tstrlist {
  2.     tstrlist(int flags = 0);
  3.     ~tstrlist();
  4.     int    get/set_count(int);
  5.     int    get/set_capacity(int);
  6.     bool   get/set_ownobjects(bool);
  7.     void   clear();
  8.     void   pack();
  9.     bool   get_sorted() const;
  10.     bool   get_duplicates() const;
  11.     bool   get_casesens() const;
  12.     // methods that work both on sorted and unsorted lists
  13.     void   ins(int index, string key, X* obj);
  14.     void   put(int index, string key, X* obj);
  15.     void   put(int index, X* obj);
  16.     int    add(string key, X* obj);
  17.     X*     operator [](int index) const;
  18.     string getkey(int index) const;
  19.     void   del(int index);
  20.     int    indexof(string key) const;
  21.     int    indexof(void* obj) const;
  22.     // these methods are allowed only on sorted lists
  23.     int    put(string key, X* obj);
  24.     X*     operator [](string key) const;
  25.     void   del(string key);
  26.     bool   search(string key, int& index) const;
  27. }


 
Merci de me dire ce qui ne va pas, je suis sùr que c'est pas grand chose en plus...

mood
Publicité
Posté le 06-08-2005 à 04:44:40  profilanswer
 

n°1171226
Taz
bisounours-codeur
Posté le 06-08-2005 à 05:11:44  profilanswer
 

ben le message d'erreur est explicite ...

n°1171227
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 05:22:55  profilanswer
 

Donc (corrigez-moi si j'ai faux), étant donné que ce n'est pas moi qui ai écrit la classe pt::tstrlist, il m'est impossible de faire une fonction qui renvoie un objet de cete classe ?
 
Ou alors il y a quelque chose qui m'échappe...

n°1171231
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 06:26:34  profilanswer
 

Du coup, j'en suis venu à faire ça, j'espère que ce n'est pas trop laid :

Code :
  1. void traite(pt::tstrlist<int> *liste) {
  2. liste = &(tstrlist<int>(SL_SORTED));
  3. }

n°1171239
Joel F
Real men use unique_ptr
Posté le 06-08-2005 à 09:24:10  profilanswer
 

Les références spamal non plus :o
 

Code :
  1. void traite(pt::tstrlist<int>& liste)
  2. {
  3.   liste = tstrlist<int>(SL_SORTED);
  4. }


n°1171255
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 12:03:06  profilanswer
 

Joel F a écrit :

Les références spamal non plus :o
 

Code :
  1. void traite(pt::tstrlist<int>& liste)
  2. {
  3.   liste = tstrlist<int>(SL_SORTED);
  4. }



liste = tstrlist<int>(SL_SORTED);

Code :
  1. d:\Documents\Programmes\FreeBrowserSDK-0.6\fb_notes\fb_notes.cpp(45): error C2582: 'operator =' fonction non disponible dans 'pt::tstrlist<X>'
  2.         with
  3.         [
  4.             X=int
  5.         ]


Il n'y a pas de contructeur par recopie dans la classe tstrlist<X> (quelle idée aussi !)

n°1171269
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 13:07:20  profilanswer
 

Et en fait voilà pourquoi le compilateur ne trouve pas de constructeur par recopie : tsrtlist<X> (comme les autres structures "liste" de ptypes) dérive (par transitivité) d'une classe "noncopyable" :

Code :
  1. class ptpublic noncopyable
  2. {
  3. private:
  4.     noncopyable(const noncopyable& );
  5.     const noncopyable& operator= (const noncopyable& );
  6. public:
  7.     noncopyable() {}
  8.     ~noncopyable() {}
  9. };

n°1171277
Taz
bisounours-codeur
Posté le 06-08-2005 à 14:09:52  profilanswer
 

...

n°1171280
Taz
bisounours-codeur
Posté le 06-08-2005 à 14:33:58  profilanswer
 

neo101 a écrit :

Du coup, j'en suis venu à faire ça, j'espère que ce n'est pas trop laid :

Code :
  1. void traite(pt::tstrlist<int> *liste) {
  2. liste = &(tstrlist<int>(SL_SORTED));
  3. }



je relève même pas ...

n°1171308
neo101
aka Néal Zheimer/Guillaurent
Posté le 06-08-2005 à 16:39:32  profilanswer
 

Taz a écrit :

je relève même pas ...


En fait, je sais bien que c'est super laid mais je vois pas d'autre "solution" à ça...
Enfin si, j'ai laissé tombé les ptypes (déçu) pour revenir à une bonne vieille std::map<string, string> !
Le seul "problème", c'est que ma contribution ne sera pas homogène avec le reste du projet qui utilise lui ptypes partout (et surtout pt::string au lieu de std::string).

mood
Publicité
Posté le 06-08-2005 à 16:39:32  profilanswer
 

n°1171319
Taz
bisounours-codeur
Posté le 06-08-2005 à 16:59:16  profilanswer
 

c'est pas que c'est laid : c'est que y a 2 erreur fondamentales en une seule ligne ! apprend le C++

n°1171443
Stroustrup​-Junior
Posté le 06-08-2005 à 23:00:53  profilanswer
 

On croirait réver! :)


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

  fonction retournant une instance de classe template

 

Sujets relatifs
fonction python pour un dictionnaire françaisparamètre template constant et type sous jacent d'enum
fonction alt[VBA][EXC] Fonction de recalcul d'une feuille Excel sous VBA ?
classe non reconnue[JAVA] partage d'instance entre 2 machine
PB: Fonction de conversion Unicode->char[vba] fonction split lecture fichier
connexion php<->mysql et performances en fonction des requetes[javascript] appel de fonction
Plus de sujets relatifs à : fonction retournant une instance de classe template


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