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 :

Problème d'exécution de mon programme


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Problème d'exécution de mon programme
    Bonjour
    J'aurais besoin d'aide pour mon programme. Donc dans mon programme je devais créer une classe mère de mon choix et ensuite créer une sous classe de cette même classe. Sauf que quand je souhaite exécuter mon programme cesse de fonctionner et ne veut pas m'afficher l'objet créer depuis la sous classe.
    Mon programme:

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #include <iostream>
    #define TAXES 0.2
     
    using namespace std;
     
    class Article
    {
    protected:
        int number;
        int quantity;
        string name;
        float price; //it is the price without the taxes
     
    public:
        Article(int number, int quantity, string name, float price);
        virtual void display();
        virtual float setPriceWithTaxes(); //it will give us the price with taxes
     
    };
     
     
    Article::Article(int aNumber, int aQuantity, string aName, float aPrice)
    {
        number = aNumber;
        quantity = aQuantity;
        name = aName;
        price = aPrice;
    }
     
    void Article::display()
    {
        cout << "The article number is " << number << endl;
        cout << "We have " << quantity << " of this article in our stock" << endl;
        cout << "The name of the article is " << name << endl;
        cout << "The price of this article without taxes is " << price << " euros" <<endl;
    }
     
    float Article::setPriceWithTaxes()
    {
        float newPrice;
        newPrice = price+(price*TAXES);
        cout << "The price of this article with taxes is " << newPrice << " euros" << endl;
    }
     
    class Clothe : public Article
    {
        string sizeClothe; //Size are from XS to XL
        string colorClothe;
     
    public:
        Clothe(string sizeClothe, string colorClothe);
        virtual void display();
    };
     
    Clothe::Clothe(string aSizeClothe,string aColorClothe): Article(number,quantity,name,price)
    {
        sizeClothe=aSizeClothe;
        colorClothe=aColorClothe;
    }
     
    void Clothe::display()
    {
        Article::display();
        cout << "The size of the clothe is " << sizeClothe << endl;
        cout << "The color of the clothe is " << colorClothe << endl;
    }
     
    int main()
    {
        Article femaleArticle = Article(1250369,10,"Maxi Dress",25.99);
        femaleArticle.display();
        femaleArticle.setPriceWithTaxes();
        Article maleArticle = Article(1236501,5,"Sweatshirt",35.99);
        maleArticle.display();
        Clothe a = Clothe("M","Red");
        a.display();
        return 0;
    }
    Est ce quelqu'un pourrait m'aider svp ?

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,
    Je ne vois pas comment un code qui ne compile pas pourrait planter!
    Ligne 55 : Clothe est un Article donc il doit s'initialiser au moins comme un article, il a un prix, un nom, ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Clothe::Clothe(int number, int quantity, string name, float price,string aSizeClothe,string aColorClothe): Article(number,quantity,name,price) {
        sizeClothe=aSizeClothe;
        colorClothe=aColorClothe;
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Je ne pense pas que j'avais un problème de compilation puisque lorsque j'ai modifié mon code avec ce que vous m'aviez proposé mon fichier .exe plante toujours. Je ne vois pas d'où le problème provient. Je vous remercie tout de meme de m'avoir aider avoir l'erreur dans mon programme.
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <iostream>
    #include <string>
    #define TAXES 0.2
     
    using namespace std;
     
    class Article
    {
    protected:
        int number;
        int quantity;
        string name;
        float price; //it is the price without the taxes
     
    public:
        Article(int number, int quantity, string name, float price);
        virtual void display();
        virtual float setPriceWithTaxes(); //it will give us the price with taxes
     
    };
     
     
    Article::Article(int aNumber, int aQuantity, string aName, float aPrice)
    {
        number = aNumber;
        quantity = aQuantity;
        name = aName;
        price = aPrice;
    }
     
    void Article::display()
    {
        cout << "The article number is " << number << endl;
        cout << "We have " << quantity << " of this article in our stock" << endl;
        cout << "The name of the article is " << name << endl;
        cout << "The price of this article without taxes is " << price << " euros" <<endl;
    }
     
    float Article::setPriceWithTaxes()
    {
        float newPrice;
        newPrice = price+(price*TAXES);
        cout << "The price of this article with taxes is " << newPrice << " euros" << endl;
    }
     
    class Clothe : public Article
    {
        string sizeClothe; //Size are from XS to XL
        string colorClothe;
     
    public:
        Clothe(int number,int quantity,string name,float price,string sizeClothe, string colorClothe);
        virtual void display();
    };
     
    Clothe::Clothe(int aNumber,int aQuantity,string aName,float aPrice,string aSizeClothe,string aColorClothe): Article(number,quantity,name,price)
    {
        sizeClothe=aSizeClothe;
        colorClothe=aColorClothe;
    }
     
    void Clothe::display()
    {
        Article::display();
        cout << "The size of the clothe is " << sizeClothe << endl;
        cout << "The color of the clothe is " << colorClothe << endl;
    }
     
    int main()
    {
        Article femaleArticle = Article(1250369,10,"Maxi Dress",25.99);
        femaleArticle.display();
        femaleArticle.setPriceWithTaxes();
        Article maleArticle = Article(1236501,5,"Sweatshirt",35.99);
        maleArticle.display();
        Clothe dress = Clothe(1265879,2,"Wedding Dress",1250.90,"S","White");
        dress.display();
        return 0;
    }
    Du coup lorsque j’exécute mon programme cette erreur s'affiche avez vous une autre idée ?

    Nom : assignment4.PNG
Affichages : 109
Taille : 17,7 Ko

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Cette ligne est suspicieuse : Clothe dress = Clothe(1265879,2,"Wedding Dress",1250.90,"S","White");.

    Si je ne dis pas de bêtises tu crées un objet temporaire, et ensuite tu appelles le constructeur (opérateur ???) de recopie.
    Et comme il n'est pas codé (c'est une copie binaire), alors ton attribut name est indéfini [... comme les autres attributs, mais celui ci n'est pas un type simple/ P.O.D.] et plante.

    Essaye Clothe dress(1265879,2,"Wedding Dress",1250.90,"S","White");.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Mon programme ne plante plus avec votre solution mais le problème du coup c'est que je ne peux pas utiliser ma fonction display pour afficher ce que j'avais mis dans mon construteur Clothe. Comment puis je le faire afficher autrement tout en me servant de ma fonction display.

  6. #6
    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
    Euh non il me semble que l'opérateur= (ou constructeur par copie) par défaut ne fera qu'appeler l'opérateur= (ou constructeur par copie) sur chaque variable membre, dans l'ordre où elles sont indiquées dans le .h
    Du coup, sans aucune allocation dynamique ni rien, je vois pas où ce programme peut planter
    As-tu lancé avec le debugger ? Parce qu'il te dira directement où ça plante.
    Un std::string par défaut est très bien connu, c'est une chaîne vide.

    Parmi les bonnes pratiques, il convient de déclarer le destructeur virtual si tu comptes faire de l'héritage. Là ça va t'as aucune allocation dynamique, donc aucune fuite mémoire, mais bon.

    le problème du coup c'est que je ne peux pas utiliser ma fonction display pour afficher ce que j'avais mis dans mon construteur Clothe. Comment puis je le faire afficher autrement tout en me servant de ma fonction display.
    Kamoulox, j'ai rien compris. Pourquoi tu peux pas faire dress.display(); ?
    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.

  7. #7
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    En effet, il n'y a rien ici qui pourrait provoquer un plantage.
    Un doute m'habite. Puisque le premier code ne pouvait pas compiler et que le plantage existait déjà! *
    @Laura, n'es-tu pas en train d'appeler une ancienne version de l'executable au lieu de celle que tu dois compiler?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Normalement je recompile avant de faire exécuter mon programme du coup je ne pense pas exécuter une ancienne version...
    @Bousk en faite je me suis trompée j'avais mal lu la réponse de @foetus du coup je peux appeler ma fonction display.
    De plus mon programme plante dès que je fais appel à mon constructuer du coup le problème doit venir de la mais je ne vois pas le problème...

  9. #9
    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
    Je ne vois absolument rien dans le code montré, si tenté que ce soit le seul code que tu aies, qui puisse faire planter quoi que ce soit.
    Lance le code dans le debugger et regarde/montre-nous la callstack.
    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.

  10. #10
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    @Laura, ton constructeur de Clothe tel que tu l'as mis n'est pas correct car tu as fait un copier coller bete:
    remplace ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Clothe::Clothe(int aNumber,int aQuantity,string aName,float aPrice,string aSizeClothe,string aColorClothe): Article(number,quantity,name,price)
    {
        sizeClothe=aSizeClothe;
        colorClothe=aColorClothe;
    }
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Clothe::Clothe(int aNumber,int aQuantity,string aName,float aPrice,string aSizeClothe,string aColorClothe): Article(aNumber,aQuantity,aName,aPrice)
    {
        sizeClothe=aSizeClothe;
        colorClothe=aColorClothe;
    }
    cela devrait mieux marcher

  11. #11
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et ceci serait beaucoup mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Clothe::Clothe(int aNumber,int aQuantity,string aName,float aPrice,string aSizeClothe,string aColorClothe):
        Article(aNumber,aQuantity,aName,aPrice),
        sizeClothe(aSizeClothe),
        colorClothe(aColorClothe)
    {}
    De plus, sizeClothe et colorClothe sont deux membres de la classe Clothe, il n'y a a pas d'utilité à les suffixer par Clothe.
    En bonus, dans le cas d'un constructeur, dans la liste d'initialisation, il n'y a pas d'ambiguité à nommer un parametre de la même manière que le champ.
    Ainsi, tu pourrais écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Clothe::Clothe(int number, int quantity,string name,float price,string size,string color):
        Article(number, quantity, name, price),
        size(size),
        color(color)
    {}
    C'est déjà nettement plus lisible, non?

    Et si on va plus loin, si le number est bien un identifiant (unique), je recommanderai de l'appeler id.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  12. #12
    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
    Sinon quitte à parler de mieux : passer les string en const&
    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.

  13. #13
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    je me disais bien que j'oubliais quelque chose
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Merci pour votre aide maintenant mon programme fonctionne correctement

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

Discussions similaires

  1. Problème d'exécution de mon programme avec Launch4J
    Par Mario Cayer dans le forum Général Java
    Réponses: 5
    Dernier message: 15/12/2013, 19h35
  2. problème lors de l'exécution de mon programme
    Par salma1990 dans le forum C++
    Réponses: 4
    Dernier message: 23/04/2013, 19h16
  3. Réponses: 5
    Dernier message: 22/02/2011, 13h52
  4. Réponses: 5
    Dernier message: 22/11/2007, 20h12
  5. Réponses: 1
    Dernier message: 13/04/2007, 08h48

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