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 :

Erreur d'appel au constructeur


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Erreur d'appel au constructeur
    Bonjour
    je rencontre un probleme dans mon code :
    Premier fichier le header: Etudiant.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
    #ifndef ETUDIANT_H_INCLUDED
    #define ETUDIANT_H_INCLUDED
     
    #include <iostream>
    #include <string>
     
    //Class Etudiant
     
    class Etudiant
    {
    public :
    //Constructeur par défaut
        Etudiant();
    //Constructeur avec parametres pour la surcharge
        Etudiant(std::string e_Nom,std::string e_Prenom,int e_Age);
    //Detructeur
        ~Etudiant();
        std::string afficherNom();
        std::string afficherPrenom();
        int afficherAge();
     
     
     
    private:
    //Attributs
        std::string m_nom;
        std::string m_prenom;
        int m_age;
     
    };
     
     
     
     
    #endif // ETUDIANT_H_INCLUDED
    Fichier Etudiant.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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <iostream>
    #include <string>
    #include "Etudiant.h"
     
    using namespace std;
     
    //Etudiant constructeur par défaut
    Etudiant::Etudiant()
    {
        m_nom = "";
        m_prenom= "";
        m_age = 0;
    }
    //Etudiant avec surcharge du constructeur
    Etudiant::Etudiant(string e_Nom,string e_Prenom,int e_Age):m_nom(e_Nom),m_prenom(e_Prenom),m_age(e_Age)
    {
     
    }
    //Destructeur
    Etudiant::~Etudiant()
    {
     
    }
    //Afficher le nom
    string Etudiant::afficherNom()
    {
       return m_nom;
    }
    //Afficher le prenom
    string Etudiant::afficherPrenom()
    {
        return m_prenom;
    }
    //Afficher l'age
    int Etudiant::afficherAge()
    {
        return m_age;
    }
    Fichier main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
    #include <string>
    #include "Etudiant.h"
    using namespace std;
     
    int main()
    {
    //On crée un objet personne
        Etudiant Personne;
        Personne.Etudiant("toto","lele",40);// ici  j'ai un message d'erreur : Invalid use of Etudiant::Etudiant
     
        return 0;
    }
    Merci d'avance pour votre aide

    Bernard
    Dernière modification par LittleWhite ; 25/05/2014 à 09h16. Motif: Titre précis

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Citation Envoyé par zoltars43 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main()
    {
    //On crée un objet personne
        Etudiant Personne;
        Personne.Etudiant("toto","lele",40);// ici  j'ai un message d'erreur : Invalid use of Etudiant::Etudiant
     
        return 0;
    }
    Un constructeur ne s'appelle qu'à la création de l'objet, pas après.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
    //On crée un objet personne
        Etudiant Personne("toto","lele",40);
     
        return 0;
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de ta réponse rapide
    que tu pense tu de mon code ?
    j'apprend les classes en ce moment et pas facile .

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pas grand chose à dire du code. N'oubliez pas d'utiliser les listes d'initialisation (notamment pour le constructeur par défaut).
    De plus, n'oubliez pas de passer par des références constantes dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etudiant(std::string e_Nom,std::string e_Prenom,int e_Age);
    ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etudiant(const std::string& e_Nom,const std::string& e_Prenom,int e_Age);
    Cela évitera des copies inutiles en interne.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Créer un constructeur par défaut (étudiant sans nom ni prénom ni age) est d'un intérêt très limité ici.
    Attention au nom des méthodes : afficherNom(), afficherPrenom(), afficherAge() n'affichent rien du tout, elles ne font que retourner des valeurs. Des noms comme getNom(), getPrenom() getAge() seraient plus corrects. Sans oublier que ces méthodes ne modifient pas l'instance, il serait donc bon de les qualifier de const.

    Les includes #include <iostream> dans les deux fichiers .h et cpp de la classe ne servent à rien, autant les supprimer, de même que les #include <string> dans le deux .cpp : il est passé avec l'#include "Etudiant.h"

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Votre constructeur par défaut devrait plus ressembler à votre constructeur surchargé.
    Dans le sens où, il vaut mieux directement construire les propriétés de l'instance avec les bonne valeurs plutôt que de les construire sans puis assigner les valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Etudiant::Etudiant():m_nom(""), m_prenom(""), m_age(0);
    {
    }
    Most Valued Pas mvp

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le constructeur par défaut de std::string crée déjà une chaîne vide.
    Il est donc inutile de les initialiser à ""
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [Windev 9] Erreur lors de l'appel à un constructeur
    Par le y@m's dans le forum WinDev
    Réponses: 2
    Dernier message: 23/08/2007, 17h02
  2. Réponses: 5
    Dernier message: 20/11/2005, 11h15
  3. [FPDF] Erreur après appel d'une fonction avec include
    Par orus8 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/11/2005, 10h49
  4. [Language][Héritage] Erreur à propos du constructeur
    Par zizou771 dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 16h48
  5. [héritage privé] appel du constructeur de base
    Par PINGOUIN_GEANT dans le forum C++
    Réponses: 4
    Dernier message: 19/10/2004, 14h05

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