IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

template, vecteur de classes perso.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut template, vecteur de classes perso.
    Bonjour,

    je voudrais mettre dans une classe template un vecteur qui vas contenir des objets de type T. Le type que j'aurais défini dans mon main.

    Le code ci dessous fonctionne très bien avec des types prédéfini tel que int. Mais dès que je veux utiliser une classe perso, ca ne fonctionne plus.
    Dans le main, je ne peux pas ajouter d'objet, j'ai une erreur au moment de la compilation.

    Ma classe template !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #include "Point.h"
    #include <vector>
    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
     
    using namespace std;
     
    template <class T> class Pile
    {
    private :
    	vector<T> tab;
     
    public :
    	Pile();
    	Pile(const vector<T> &t);
    	~Pile();
     
    	void addObject(const T &object);
    	void dellObject();
    };
     
    template <class T> Pile<T>::Pile()
    {
    	cout << "pile construite" << endl;
    }
     
    template <class T> Pile<T>::Pile(const vector<T> &t)
    {
    }
     
    template <class T> Pile<T>::~Pile()
    {
    }
     
    template <class T> void Pile<T>::addObject(const T &object)
    {
    	tab.push_back(object);
    }
     
    template <class T> void Pile<T>::dellObject()
    {
    	tab.pop_back();
    }
    Le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include "Point.h"
    #include "Pile.cpp"
     
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
     
    using namespace std;
     
    int main()
    {
    	Point a;
     
    	Pile<Point> pile_1;
    	pile_1.addObject(a);
     
    	return 0;
    }
    Le header de la classe Point (qui fonctionne, je l'ai déjà testée séparément).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #ifndef POINT
    #define POINT
     
    class Point
    {
    	private :
    		short x;
    		short y;
     
    	public :
    		Point();
    		Point(Point & a);
    		~Point();
     
    		void affiche();
     
    		short getX();
    		short getY();
     
    		void setX(short value);
    		void setY(short value);
     
    		float norme(Point a);
    		bool testEgal(Point a);
     
    };
    #endif
    Pour les plus courageux, mes erreux de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    g++ -Wall -O2 main.cpp  Point.o Pile.o
    In file included from /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/i686-redhat-linux/bits/c++allocator.h:34,
                     from /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/allocator.h:48,
                     from /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/vector:62,
                     from Pile.cpp:2,
                     from main.cpp:2:
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/ext/new_allocator.h: In member function ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = Point]’:
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/stl_vector.h:737:   instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Point, _Alloc = std::allocator<Point>]’
    Pile.cpp:38:   instantiated from ‘void Pile<T>::addObject(const T&) [with T = Point]’
    main.cpp:15:   instantiated from here
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/ext/new_allocator.h:105: erreur: no matching function for call to ‘Point::Point(const Point&)’
    Point.h:12: note: candidats sont: Point::Point(Point&)
    Point.h:11: note:                 Point::Point()
    In file included from /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/vector:69,
                     from Pile.cpp:2,
                     from main.cpp:2:
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/vector.tcc: In member function ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Point, _Alloc = std::allocator<Point>]’:
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/stl_vector.h:741:   instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Point, _Alloc = std::allocator<Point>]’
    Pile.cpp:38:   instantiated from ‘void Pile<T>::addObject(const T&) [with T = Point]’
    main.cpp:15:   instantiated from here
    /usr/lib/gcc/i686-redhat-linux/4.4.2/../../../../include/c++/4.4.2/bits/vector.tcc:306: erreur: no matching function for call to ‘Point::Point(const Point&)’
    Point.h:12: note: candidats sont: Point::Point(Point&)
    Point.h:11: note:                 Point::Point()
    make: *** [main] Erreur 1
    D'après ce que je comprend je ne donne pas de bon paramètre à la méthode addObject. Mais j'ai beau essayer tous ce qui me passe par la tête, je n'y arrive pas

    Si vous avez une idée, merci.

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ton constructeur de copie n'a pas le bon prototype.
    Tu as :
    Il faudrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point(const Point& a);
    (i.e une signature correcte pour le constructeur de copie)

    La différence est subtile je te l'accorde

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    C'est éxactement ça. Merci beaucoup

    problem solved

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire ma propre classe/template vecteur
    Par touftouf57 dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/11/2010, 12h43
  2. Mettre un vecteur template dans une class
    Par Dimitri_87 dans le forum Langage
    Réponses: 8
    Dernier message: 04/12/2006, 19h33
  3. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  4. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07
  5. [ JSP ] [ Tomcat ] importer une classe perso
    Par captainpouet dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 11/03/2004, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo