Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème classe template et constructeur de copie

Le compilateur ne reconnait pas la fonction ...

    12 août 2007 à 10:11:41

    Bonjour tout le monde ! Je travaille avec Code::blocks sous Ubuntu.
    Voilà mon problème : j'ai crée une classe template Tableau ( du type liste doublement chaînée ) où je peux retrouver les éléments par leur numéro ou leur indice.
    La classe marche très bien avec des types de base (int, double ... ). :D

    Tout content et fier de moi ( première utilisation des templates ! ;) lol ) Je m'empresse de l'implanter dans un programme plus gros.
    Et là, je compile et message d'erreur : :euh:

    1. /home/pepedeluxe/CodeBlocks/Projects/MoteurPhysique2D/Casse brique circulaire/Physique.cpp:: In member function «void Physique::gestionCollisions(Tableau<std::vector<ObjetD, std::allocator<ObjetD> > >&)":
    2. /home/pepedeluxe/CodeBlocks/Projects/MoteurPhysique2D/Casse brique circulaire/Physique.cpp:249: erreur: no matching function for call to «Tableau<std::vector<ObjetD, std::allocator<ObjetD> > >::Tableau(Tableau<std::vector<ObjetD, std::allocator<ObjetD> > >)"
    3. /home/pepedeluxe/CodeBlocks/Projects/MoteurPhysique2D/Casse brique circulaire/Tableau.tpp:8: note: candidats sont: Tableau<T>::Tableau(Tableau<T>&) [with T = std::vector<ObjetD, std::allocator<ObjetD> >]
    4. :: === Build finished: 2 errors, 0 warnings ===


    La ligne correspondante est la suivante :
    1. Tableau <std::vector <ObjetD> > tmp = CreeTMP(elements) ;


    Où creeTMP est :
    1. Tableau <std::vector <ObjetD> > Physique::CreeTMP(Tableau <std::vector <ObjetD> > elements)
    2. {
    3.     Tableau <std::vector <ObjetD> > tmp = elements ;
    4.     for (int j = 0 ; j < tmp.taille() ; j++)
    5.     {
    6.         for (unsigned int i = 0 ; i < tmp(j).size() ; i++)
    7.         {
    8.             if ( tmp(j)[i].type() == CERCLE )
    9.             {
    10.                 tmp(j)[i].point(0) = tmp(j)[i].point(0) + tmp(j)[i].vitesse()/FPS ;
    11.             }
    12.         }
    13.     }
    14.     return tmp ;
    15. }

    ( donc retourne bien un Tableau <std::vector <ObjetD> > )

    Et mon constructeur de copie est le suivant :

    1. template <typename T>
    2. Tableau <T>::Tableau(Tableau <T> &tableau)
    3. {
    4.     p_curseur = NULL ;
    5.     _taille = tableau._taille ;
    6.     for (int i = 0 ; i < _taille ; i++)
    7.     {
    8.         ajout_fin(tableau(i), tableau.nom(i)) ;
    9.     }
    10.     _curseur = tableau._curseur ;
    11.     deplaceCurseur(_curseur) ;
    12. }


    Je ne vois vraiment pas ce qui coince : je donne le bon type en argument du constructeur de copie, mais apparemment le compilateur ne reconnait pas la signature de mon constructeur de copie...
    Je me doute bien que le fait que ce soit une classe template y est pour quelque chose, mais, pourquoi ça marche pas !!! o_O
    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2007 à 22:23:55

      Il manque le const.

      PS: évite de copier (sauf si tu as du temps à perdre) => reférences-constantes.
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

      Problème classe template et constructeur de copie

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown