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 :

classe template pb constructeur


Sujet :

Langage C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut classe template pb constructeur
    voila j'ai une classe template buffer:

    buffer.h
    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
     
     
    template<typename T>
    	class Buffer
    	{
     
    public:
    	typedef std::list<OBJET<T>> BufferContainer;
     
     
    public:
    	//default constructor
    		Buffer(void);
     
    public:
     
    	Buffer(const string Name1, const string Name2);
     
    public:
    	// default destructor
    	~BOF_Buffer(void); 
     
     
    private:
    	virtual void Init(
    		const string Name1, 
    		const string Name2,
    		); 
     
     
    public:
     
    	BufferContainer& get_BufferContainer(void) const 
    	{ 
    		return _Buffer; 
    	}
     
     
    private:
    		 BufferContainer _Buffer;
     
     
    };
     
    #endif BUFFER_H_
    dans buffer.Cpp

    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
     
     
    //default constructor
     
    template<typename T> 
    Buffer<T>:: Buffer()
    {	
    	_Buffer = new BufferContainer();
    }
     
    //default constructor
     
    template<typename T> 
    Buffer<T>:: Buffer(const string Name1, const string Name2)
    {
    	_Buffer = new BufferContainer();
    	this->BOF_Init(Name1, Name2);
    }
     
    // default destructor
    template<typename T> 
    Buffer<T>:: ~Buffer(void) 
    { 
    }
    Mais dans une autre classe, je déclare dans les membres privés de cette classe

    Buffer<float * > Cont;

    et dans le constructeur de ma classe (.ccp) je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Buffer<float * > Cont("voila", "bla");
    Mais j'ai pas mal d'erreurs et ça ne marche pas. c'est la 1ere fois ke je fais une classe template.

    Merci pour votre aide

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    On peut voir les erreurs ?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    voila

    error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty> *' (or there is no acceptable conversion)

    est ce que vous trouver ce que j'ai fait est juste. surtout l'utilisation du template dans la 2eme classe

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Des trucs bizares (incohérences ou des new alors que je ne vois pas de déclaration de pointeurs):
    Citation Envoyé par ouinih
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public:
    	// default destructor
    	~BOF_Buffer(void);
    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
    //default constructor
    template<typename T> 
    Buffer<T>:: Buffer()
    {	
    	_Buffer = new BufferContainer();
    }
    
    //default constructor
    
    template<typename T> 
    Buffer<T>:: Buffer(const string Name1, const string Name2)
    {
    	_Buffer = new BufferContainer();
    	this->BOF_Init(Name1, Name2);
    }
    Autre chose, dans la déclaration d'une classe si tu fais :

    Et que tu veux appeller un constructeur autre que celui par defaut, il faut l'appeller dans la liste d'initialisation de la définition du constructeur de ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaClassse::MaClasse()
      : Cont("voila", "bla")
    {}
    @+

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    1- laisse un espace entre tes deux chevrons fermants

    2- rajoute les const qui manquent

    3- Des références constantes, cela vaut le coup

    4- Ne sépare pas ton implémentation dans un .cpp ; va voir la FAQ pour plus d'infos

    5- Le préfixage par '_' est déconsellé ; cf FAQ pour plus de détails

    (Je ne te garantis pas que cela lêve toutes tes erreurs, mais un nombre certain le sera. Sans parler de celles que tu n'as pas encore vues (erreurs de link relatives à 4-))
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Si tu n'as encore jamais utilisé les template commence par faire une class simple.
    Et ensuite rend ton code plus complexe, jusqu'a arriver à ce que tu veux.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Points : 66
    Points
    66
    Par défaut
    d'accord merci

Discussions similaires

  1. Templates et constructeurs de classe héritées
    Par Matthieu Brucher dans le forum Langage
    Réponses: 14
    Dernier message: 28/06/2014, 00h00
  2. class template et constructeur
    Par Gorgo13 dans le forum C++/CLI
    Réponses: 3
    Dernier message: 21/11/2012, 11h52
  3. Prototype du constructeur d'une classe template
    Par Meseira dans le forum Langage
    Réponses: 11
    Dernier message: 05/01/2011, 08h47
  4. constructeur template dans une classe template
    Par regis.portalez dans le forum Langage
    Réponses: 16
    Dernier message: 13/12/2010, 16h50
  5. Réponses: 6
    Dernier message: 06/10/2004, 12h59

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