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 :

J'ai besoin de deux constructeurs par copie avec une liste d'initialisation différent


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut J'ai besoin de deux constructeurs par copie avec une liste d'initialisation différent
    Bonjour tout le monde,

    Je dois charger en mémoire deux fichiers txt.

    Pour cela, j'ai besoin de deux constructeurs par copie qui ne sont différent que par leur liste d'initialisation.

    ça ne fonctionne pas, j'ai ce message d'erreur :

    function '__thiscall CFauxFrere::CFauxFrere(const class CFauxFrere &)' already has a body
    Avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Ligne(Source.m_Ligne)
    {
    }
     
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Code(Source.m_Code),m_Nom(Source.m_Nom),m_Type(Source.m_Type),m_Feminin(Source.m_Feminin),m_Pluriel(Source.m_Pluriel),m_ComplementInformation(Source.m_ComplementInformation),m_Definition(Source.m_Definition);
    {
    }
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    Ben là, typiquement je dirais que c'est normal que le compilo râle!

    dans ton .HPP, tu dois avoir un seul constructeur par recopie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFauxFrere(const CFauxFrere& Source);
    Tu ne peux donc pas lui donner plusieurs définitions dans le .CPP

    A la rigueur tu peux bidouiller en rajoutant un parametre bidon afin que le compilo prenne le bon constructeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CFauxFrere::CFauxFrere(const CFauxFrere& Source, int bidon) //constructeur par copie
    :m_Ligne(Source.m_Ligne)
    {
    }
     
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Code(Source.m_Code),m_Nom(Source.m_Nom),m_Type(Source.m_Type),m_Feminin(Source.m_Feminin),m_Pluriel(Source.m_Pluriel),m_ComplementInformation(Source.m_ComplementInformation),m_Definition(Source.m_Definition);
    {
    }
    est ce que ca répond a ta question?

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Points : 218
    Points
    218
    Par défaut
    Salut,

    Tu ne peux pas avoir deux constructeurs avec la même signature. (Sinon comment savoir lequel appeler ?)

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par loicounet Voir le message
    Ben là, typiquement je dirais que c'est normal que le compilo râle!

    dans ton .HPP, tu dois avoir un seul constructeur par recopie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFauxFrere(const CFauxFrere& Source);
    Tu ne peux donc pas lui donner plusieurs définitions dans le .CPP

    A la rigueur tu peux bidouiller en rajoutant un parametre bidon afin que le compilo prenne le bon constructeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CFauxFrere::CFauxFrere(const CFauxFrere& Source, int bidon) //constructeur par copie
    :m_Ligne(Source.m_Ligne)
    {
    }
     
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Code(Source.m_Code),m_Nom(Source.m_Nom),m_Type(Source.m_Type),m_Feminin(Source.m_Feminin),m_Pluriel(Source.m_Pluriel),m_ComplementInformation(Source.m_ComplementInformation),m_Definition(Source.m_Definition);
    {
    }
    est ce que ca répond a ta question?
    Salut,

    Un tout grand merci pour ton aide.

    J'ai fais ce que tu as dis :

    Dans le point h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CFauxFrere(const CFauxFrere& Source,int bidon); //constructeur par copie
     
    CFauxFrere(const CFauxFrere& Source); //constructeur par copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CFauxFrere::CFauxFrere(const CFauxFrere& Source, int bidon) //constructeur par copie
    :m_Ligne(Source.m_Ligne)
    {
    }
     
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Code(Source.m_Code),m_Nom(Source.m_Nom),m_Type(Source.m_Type),m_Feminin(Source.m_Feminin),m_Pluriel(Source.m_Pluriel),m_ComplementInformation(Source.m_ComplementInformation),m_Definition(Source.m_Definition);
    {
    }
    J'ai ce message d'erreur sur le deuxième constructeur :

    syntax error : '{'
    et

    ';' found in what should be a comma-separated list
    Qu'en penses-tu ?

    Encore merci
    beegees

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Aurelpitiless Voir le message
    Salut,

    Tu ne peux pas avoir deux constructeurs avec la même signature. (Sinon comment savoir lequel appeler ?)
    Salut,

    Tu as raison, comme ça s'est vrai que s'est plus claire.

    Merci

    beegees

  6. #6
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    regarde au bout de ta liste d'initialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Definition(Source.m_Definition);
    t'as mis un ";" au bout ;-)
    enlève le déjà, je pense que le
    Citation:
    ';' found in what should be a comma-separated list
    vient de là!

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par loicounet Voir le message
    regarde au bout de ta liste d'initialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Definition(Source.m_Definition);
    t'as mis un ";" au bout ;-)
    enlève le déjà, je pense que le

    vient de là!
    Salut,

    Merci pour ta réponse.

    En effet, il ne fallait pas mettre de ; à la fin, je ne suis pas encore très bien habitué avec les constructeurs.

    Maintenant, mon texte ne s'affiche plus.

    Tantôt, avant que j'ajoute bidon, il s'affichait.

    Merci encore

    beegees

  8. #8
    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 861
    Points
    11 861
    Par défaut
    Tu peux aussi écrire un seul constructeur avec un booléen en argument supplémentaire.
    Si il vaut 'true', tu initialises de telle manière, sinon de l'autre manière.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Points : 158
    Points
    158
    Par défaut
    ca marche now donc?
    si oui marque ton sujet en "résolu"

  10. #10
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par loicounet Voir le message
    ca marche now donc?
    si oui marque ton sujet en "résolu"
    Salut,

    Non ça ne marche pas encore mais dès que ça fonctionne je mettrai le résolu.

    @+

    beegees

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Alp Voir le message
    Tu peux aussi écrire un seul constructeur avec un booléen en argument supplémentaire.
    Si il vaut 'true', tu initialises de telle manière, sinon de l'autre manière.
    Salut Alp,

    Ce sont deux constructeurs bien différent, le premier à un seul paramètre, le second en a 7.

    Tu penses que ça pourrais fonctionner dans ce cas là ?

    Merci
    beegees

  12. #12
    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 861
    Points
    11 861
    Par défaut
    Si tu mets des valeurs par défaut aux arguments qu'il n'y a pas dans le premier, oui. Mais on parle bien du constructeur par copie là hein ?
    Dans tous les cas, je pense qu'il vaudrait mieux écrire une fonction "Init" ou autre, et l'appeler depuis un unique constructeur de copie. Ainsi, tu lui passes un bool ou quoi pour changer de mode d'initialisation. Car le truc important est qu'il risque d'y avoir des copies auxquelles tu ne t'attends pas (retour de fonction par valeur, prise d'un argument par valeur, ...), et dans ce cas il faudra un constructeur de copie conforme à la signature qu'il doit avoir, autrement dit sans argument supplémentaire.

  13. #13
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Alp Voir le message
    Si tu mets des valeurs par défaut aux arguments qu'il n'y a pas dans le premier, oui. Mais on parle bien du constructeur par copie là hein ?
    Dans tous les cas, je pense qu'il vaudrait mieux écrire une fonction "Init" ou autre, et l'appeler depuis un unique constructeur de copie. Ainsi, tu lui passes un bool ou quoi pour changer de mode d'initialisation. Car le truc important est qu'il risque d'y avoir des copies auxquelles tu ne t'attends pas (retour de fonction par valeur, prise d'un argument par valeur, ...), et dans ce cas il faudra un constructeur de copie conforme à la signature qu'il doit avoir, autrement dit sans argument supplémentaire.
    Merci pour ta réponse.

    S'est quand même dommage que l'on ne peut pas créer le même constructeur avec une liste d'initialisation différente.

    Bon je vais essayer de voir en créant peut être une toute nouvelle classe (je ne sais pas si s'est le meilleur choix).

    Merci encore.

    beegees

  14. #14
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Pour que tu exprime ce besoin, c'est qu'il y a , AMHA, un problème de conception

  15. #15
    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 861
    Points
    11 861
    Par défaut
    Si tu avais deux constructeurs avec les mêmes arguments, comment serait-il alors possible de choisir lequel appeler ? Impossible. Parfois, pour mieux concevoir, il faut se mettre à la place du compilateur...

    Créer une autre classe est peut-être une solution lourde. Je ne sais pas trop. Dans tous les cas, c'est bizarre que tu ais à faire ça.

  16. #16
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Pour que tu exprime ce besoin, c'est qu'il y a , AMHA, un problème de conception
    possible qu'il y'ait un problème de conception, je ne suis pas encore assez expérimenté pour le dire.

    je vois le prof ce soir, je lui demanderai.

    S'est quoi --> AMHA

    Merci
    beegees

  17. #17
    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 861
    Points
    11 861
    Par défaut
    AMHA = A Mon Humble Avis.

    Et oui, comme je l'ai également dit, c'est vraiment étrange que ce besoin se soit fait ressentir ...

  18. #18
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    [QUOTE=Alp;3239547]Si tu avais deux constructeurs avec les mêmes arguments, comment serait-il alors possible de choisir lequel appeler ? Impossible. Parfois, pour mieux concevoir, il faut se mettre à la place du compilateur...

    Créer une autre classe est peut-être une solution lourde. Je ne sais pas trop. Dans tous les cas, c'est bizarre que tu ais à faire ça.[/QUOTE

    Tu as raison, créer une nouvelle classe, s'est lourd.

    Ce constructeur me permet d'envoyer une ligne à la méthode de chargement car le fichier texte est composé de plusieurs lignes séparées par un \n :

    CFauxFrere(const char* UneLigne);
    Cet autre constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CFauxFrere(const char* UnCode,const char* UnNom, const char* UnType, const char* FemininOuPas, const char* PlurielOuPas, const char* UnComplementInformation,const char* UneDefinition);
    et l'équivalent pour le constructeur par copie pour une ligne qui contient 7 const char* tout délimités par une tabulation.

    Je viendrai demain vous dire comment on a résolu le problème.

    Merci pour tout

    beegees

  19. #19
    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 861
    Points
    11 861
    Par défaut
    Si tu ne passais que le contenu du fichier, et que dans ta classe tu rajoutais une instance d'une classe qui gèrerait tout ce qui est parsing, et ainsi tu pourrais à l'intérieur de ta classe récupérer tout ce qui est Nom, etc.

  20. #20
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses.

    Le Professeur m'a conseillé de mettre tous les paramètres dans la même liste d'initialisation

    ça donne donc quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CFauxFrere::CFauxFrere(const CFauxFrere& Source) //constructeur par copie
    :m_Ligne(Source.m_Ligne),m_Code(Source.m_Code),m_Nom(Source.m_Nom),m_Type(Source.m_Type),m_Feminin(Source.m_Feminin),m_Pluriel(Source.m_Pluriel),m_ComplementInformation(Source.m_ComplementInformation),m_Definition(Source.m_Definition)
    {
    }
    Un tout grand merci encore à tous.

    beegees

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] Filtrer les enregistrements par date avec une liste déroulante
    Par sardaucar dans le forum IHM
    Réponses: 7
    Dernier message: 19/11/2013, 19h13
  2. Réponses: 3
    Dernier message: 22/03/2011, 12h56
  3. [POO] constructeur de copie pour une liste
    Par oswalidos dans le forum C++
    Réponses: 8
    Dernier message: 29/10/2008, 09h39
  4. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 19h15
  5. [deb.]Constructeur par copie
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2005, 13h33

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