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

C++ Discussion :

constructeurs et surcharge


Sujet :

C++

  1. #1
    Membre éclairé
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Points : 752
    Points
    752
    Par défaut constructeurs et surcharge
    Bonjour,

    J'ai le code suivant:
    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
    class stack { //base of container
    //...
    public:
        stack(void); //default constructor
        stack(T); //best constructor(with a data)
    //...
    }
    //...
    stack::stack(void) { //default constructor
    //////////////////////////////////////////////////////
    //'stack' : l'utilisation d'une classe modèle requiert une liste d'arguments modèle
    //idem
    //'{ctor}' : fonction membre non déclarée dans 'stack'
    //////////////////////////////////////////////////////
        num=1;
        premier=NULL;
        dernier=NULL;
        ptr=NULL;
        progress=0;
    }
    template <class T> //contained type
    stack::stack(T data) { //best constructor(with a data)
        num=1;
        premier=new contain; //définition du pointeur "premier"
        dernier=premier; //déclaration du pointeur "dernier"
        premier.donnee=data; //"donnee" est une variable template dans l'objet pointé par "premier"
        premier.suivant=NULL; //"suivant" est un pointeur dans l'objet pointé par "premier"
        premier.precedant=NULL; //"precedant" est un pointeur dans l'objet pointé par "premier"
    //////////////////////////////////////////////////////
    //'stack<T>::{ctor}' : impossible de faire correspondre la définition de fonction avec une déclaration existante
    //////////////////////////////////////////////////////
    }
    //...
    Merci d'avance,
    ProgVal

    EDIT: les erreurs sont dans les commentaires

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Il te manque un ';' à la fin de la déclaration de ta classe.

    Autrement, un constructeur de template de classe doit avoir sa définition précédée de template, même si l'argument template n'apparait pas dans ses paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<class T>
    stack<T>::stack(void) { //default constructor

  3. #3
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Elle est où la question ? Il est où le problème ?

  4. #4
    Membre éclairé
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Points : 752
    Points
    752
    Par défaut
    Edition du premier message

    Encore une fois, merci à toi JolyLoic!

    Par curiosité, qu'est-ce qu'un "constructeur de template de classe"?


    EDIT:
    J'ai également appliqué la correction à toutes les fonctions. Je suis passé de 102 erreurs et 2 avertissements à 12 erreur (ouf).
    Par contre, j'ai toujours un problème, je ne sais pas s'il est lié:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include "stdafx.h"
     
    template <class T> //contained type
    class contain { //container
    public:
     T donnee;
     contain *suivant, *precedant;
     T get() {return donnee};
     bool operator==(contain e) {return (donnee==e.donnee);}
     bool operator!=(contain e) {return (donnee!=e.donnee);}
     bool operator<(contain e) {return (donnee<e.donnee);}
     bool operator>(contain e) {return (donnee>e.donnee);}
     bool operator<=(contain e) {return (donnee<=e.donnee);}
     bool operator>=(contain e) {return (donnee>=e.donnee);}
     bool operator==(T e) {return (donnee==e);}
     bool operator!=(T e) {return (donnee!=e);}
     bool operator<(T e) {return (donnee<e);}
     bool operator>(T e) {return (donnee>e);}
     bool operator<=(T e) {return (donnee<=e);}
     bool operator>=(T e) {return (donnee>=e);}
     
     contain &operator=(T e) {donnee=e;}
     contain &operator=(contain e) {donnee=e.donnee;}
    };
    //...
    class stack{
    //...
    public:
    //...
        void swap(int,contain); //basic swap
        void swap(int,stack,int); //advanced swap
        void swap(stack); //swap all
    //...
    };
    //...
    template <class T> //contained type
    void stack<T>::swap(int num,contain &obj2) {
    /////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////
    //'contain' : l'utilisation d'une classe modèle requiert une liste d'arguments modèle
    /////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////
        contain *obj1, *obj2;
        contain *around1,*around2;
        contain *ptr;
        obj1=get_front(n);
        ptr=obj2->precedant->suivant;
        obj1->precedant->suivant=obj2->precedent->suivant;
        obj2->precedent->suivant=ptr;
        obj1=get_back(n);
        ptr=obj2->suivant->precedant;
        obj1->suivant->precedant=obj2->suivant->precedant;
        obj2->suivant->precedant=ptr;
        ptr=NULL;
    }
    //...
    L'erreur est encadrée

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par ProgVal Voir le message
    Par curiosité, qu'est-ce qu'un "constructeur de template de classe"?
    stack<T> est un template de classe, donc stack<T>::stack est un constructeur de template de class.
    Citation Envoyé par ProgVal Voir le message
    EDIT:
    Par contre, j'ai toujours un problème, je ne sais pas s'il est lié:

    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
     
    template <class T> //contained type
    class contain { //container
     
    //...
    };
     
    template <class T> //contained type
    void stack<T>::swap(int num,contain &obj2) {
    /////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////
    //'contain' : l'utilisation d'une classe modèle requiert une liste d'arguments modèle
    /////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////
        contain *obj1, *obj2;
    contain est un template. Il faut lui donner un argument template. Ca peut être T, qui est ce que tu veux probablement faire ici, mais ça pourrait être autre chose, le compilateur ne peut pas le deviner, il faut donc lui indiquer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contain<T> *obj1, *obj2;

  6. #6
    Membre éclairé
    Avatar de ProgVal
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 636
    Points : 752
    Points
    752
    Par défaut
    D'accord, merci beaucoup.
    En fait, j'imaginai les templates comme une macro du préprocesseur...

    Merci beaucoup (bis)

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

Discussions similaires

  1. Constructeur et surcharge
    Par arkhamon dans le forum Langage
    Réponses: 10
    Dernier message: 22/07/2013, 11h23
  2. Réponses: 13
    Dernier message: 28/09/2009, 19h22
  3. [POO]Probléme de constructeur virtuel surchargé
    Par Laurent Dardenne dans le forum Delphi
    Réponses: 10
    Dernier message: 15/08/2006, 13h19
  4. Constructeur par défaut en cas de surcharge
    Par gigi_m dans le forum MFC
    Réponses: 4
    Dernier message: 08/06/2005, 10h58
  5. [Constructeur]Pb avec la surcharge d un constructeur
    Par cmoulin dans le forum Langage
    Réponses: 3
    Dernier message: 26/04/2004, 10h29

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