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 :

fin d'execution se termine par une erreur


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 34
    Points
    34
    Par défaut fin d'execution se termine par une erreur
    salut a tout,
    Je commence par remercier tous qu'il mon aide a résoudre mon problème sur le surcharge de l'operateur*.
    Ensuite je vous présente mon nouveau problème.J'ai réalisé cette classe est tout marche bien lors d'exécution mais avant que le message qui vous demande
    d'apuier sur un bouton pour continuer n'apparaitre une fenêtre apparait et m'informe que article.exe a rencontré un problème et il doit fermer.
    Je n'ai pas pu connaitre la raison alors S.V.P aider moi et merci d'avance.
    classe article
    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
     
    #include<iostream>
    #include<string>
    using namespace std;
    class article
    {
    	string m_libelle;
    	double m_prixht,m_tva,m_remise;
    	int m_bonus;
    public:
    	article(string ,double,double,double,int);
    	article();
    	double calculprixttc();
    	bool operator<(article);
    	bool operator==(article);
    	bool operator!=(article);
    	void afficher(ostream &);
    	friend ostream &operator<<(ostream &,article);
    	friend istream &operator>>(istream &,article &);
    };
    l'implémentation de classe article
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    #include"article.h"
    article::article(string libelle,double prixht,double tva,double remise,int bonus)
    {
    	m_libelle = libelle;
    	m_prixht = prixht;
    	m_tva = tva;
    	m_remise = remise;
    	m_bonus = bonus;
    }
    article::article()
    {
    	 cout<<"donner le nom d'article";
    	cout<<endl;
    	cin>>m_libelle;
    	cout<<endl;
    	cout<<"donner le prix HT";
    	cout<<endl;
    	cin>>m_prixht;
    	cout<<endl;
    	cout<<"donner le taux de tva";
    	cout<<endl;
    	cin>>m_tva;
    	cout<<endl;
    	cout<<"donner le taux de remise";
    	cout<<endl;
    	cin>>m_remise;
    	cout<<endl;
    	cout<<"donner le nombre de point fidelite";
    	cout<<endl;
    	cin>>m_bonus;
    	cout<<endl;
    }
     
    double article::calculprixttc()
    {
    	return(m_prixht+(m_prixht*m_tva/100));
    }
     
     
    bool article::operator<(article a)
    {
    	if(calculprixttc()<a.calculprixttc())
          return true;
    	else 
    	  return false;
    }
     
    bool article::operator!=(article a)
    {
    	if(calculprixttc()!=a.calculprixttc())
    		return true;
    	else 
    		return false;
    }
     
    bool article::operator ==(article a)
    {
    	if(calculprixttc()==a.calculprixttc())
    		return true;
    	else
    		return false;
    }
     
    ostream &operator<<(ostream &out,article a)
    {
    	out<<a.m_libelle;
    	out<<"\t";
    	out<<a.m_prixht;
    	out<<"\t";
    	out<<a.m_tva;
    	out<<"\t";
    	out<<a.m_bonus;
    	out<<"\t";
    	out<<a.m_remise;
    	out<<"\t\n";
    	return out;
    }
    istream &operator>>(istream &in,article &a)
    {
    	cout<<"donner le nom d'article";
    	cout<<endl;
    	in>>a.m_libelle;
    	cout<<endl;
    	cout<<"donner le prix HT";
    	cout<<endl;
    	in>>a.m_prixht;
    	cout<<endl;
    	cout<<"donner le taux de tva";
    	cout<<endl;
    	in>>a.m_tva;
    	cout<<endl;
    	cout<<"donner le taux de remise";
    	cout<<endl;
    	in>>a.m_remise;
    	cout<<endl;
    	cout<<"donner le nombre de point fidelite";
    	cout<<endl;
    	in>>a.m_bonus;
    	cout<<endl;
    	return in;
    }
     
    void article::afficher(ostream &out)
    { 
    	out<<m_libelle;
    	out<<"\t";
    	out<<m_prixht;
    	out<<"\t";
    	out<<m_tva;
    	out<<"\t";
    	out<<m_bonus;
    	out<<"\t";
    	out<<m_remise;
    	out<<"\t\n";
     
     
    }
    j'appelle à cette classe dans la classe commande par le pointeur
    voici la classe commande
    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
     
    #include<iostream>
    #include "article.h"
    using namespace std;
    class commande
    {
    	int m_numero,m_nombreunite;
    	article *m_art;
    public:
    	commande();
    ~commande();
    double	totalcommande();
    	void operator++();
    	void operator--();
    	friend ostream &operator<<(ostream &,commande);
    };

    l'implémentation de classe commande


    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
     
    #include "commande.h"
    commande::commande()
    {
    	cout<<"donner numero de commande";
        cin>>m_numero;
        m_art=new article();
    	cout<<"donner la qte";
        cin>>m_nombreunite;
    }
    commande::~commande()
    {
    	delete m_art;
    }
     
    double commande::totalcommande()
    {
      return(m_art->calculprixttc()* m_nombreunite);
    }
     
    void commande::operator ++()
    {
    	m_nombreunite++;
    }
     
    void commande::operator --()
    {
    	m_nombreunite--;
    }
     
    ostream &operator<<(ostream &out,commande c)
    {
    	out<<c.m_numero;
    	out<<endl;
    	c.m_art->afficher(out);
    	out<<"\t";
    	out<<c.m_nombreunite;
    	out<<"\t"; 
    	out<<c.m_art->calculprixttc();
    	cout<<"\t";
    	out<<c.totalcommande();
    	return out;
    }
    la fonction main juste pour tester la creation puis l'affichage d'un objet commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "commande.h"
    void main()
    {
     
    	commande c;
    	cout<<c;
    }

  2. #2
    Membre actif
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Points : 214
    Points
    214
    Par défaut
    C'est très certainement un problème de pointeur mal utiliser. Utilise un débuggeur pour trouver où ça plante.

    Petit commentaire rapide sur ton code :
    Tu utilises mal les constructeur : on n'évite d'y faire des opérations telle que std::cin dedans. Penses aussi à utiliser la liste d'initialisation ( cf FAQ ) .
    operator< : tu peux simplifier la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool article::operator<(article a) { return calculprixttc()  < a.calculprixttc(); }
    Idem pour les autres opérateurs.

    Penses à passer par référence ( constante ) les objets aux fonctions le plus possible.

    Tu peux enchainer les <<. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out << a.m_libelle << "\t" << ...
    Mais c'est un détail.

    Tests les std::cin ( voir FAQ ) .

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu as une classe qui contient un pointeur, un destructeur qui delete ce pointeur, mais pas de constructeur de copie ou d'opérateur d'affectation --> Ceci est la porte ouverte aux erreurs de mémoire.

    Tu dois les implémenter, ou rendre ta classe non-copiable (typiquement en déclarant ces deux membres comme privés, sans jamais les définir).

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 34
    Points
    34
    Par défaut
    bonjour
    merci a tous qu'ont m'aide
    j'ai résolu le problème en réécrivant la classe commande.

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

Discussions similaires

  1. [XL-2007] Erreur de calcul causée par une erreur d'écriture
    Par glpx65 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 26/09/2014, 14h14
  2. Réponses: 2
    Dernier message: 22/02/2011, 12h03
  3. bloquée par une erreur "DLLSelfRegisterEX" inexistant
    Par dzsali dans le forum Installation, Déploiement et Sécurité
    Réponses: 1
    Dernier message: 06/07/2010, 01h48
  4. [MySQL] Executer un script par une seule IP
    Par Dark Jukka dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/04/2008, 19h46
  5. Récuperer div dont l'id se termine par une certaine chaine
    Par Kimado dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/04/2008, 16h20

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