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'affichage, erreur de compilation ?


Sujet :

C++

  1. #1
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut Problème d'affichage, erreur de compilation ?
    Bonjour ,

    Voici le code de 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
    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
     
    #define LONG_COMENT 100	//pour la longueur du commentaire
    #define LONGNOM 50
    #define NB_MAT 5	// nombre de matières maximum suivies par l'étudiant
     
    using namespace std;
     
    int un_nombre, i, ctt, htt;
    char n,p;
     
     
    //*******************************
    //CLASSE PERSONNE
    //*******************************
     
    class Personne{
     
    protected:
     
    char *nom[LONGNOM];
    char *prenom[LONGNOM];
    int age;
     
    class Personne *p;
     
    public:	Personne();		//Constructeurs
    		Personne(char*, char*, int);
    		virtual ~Personne();	//Destructeur
     
    		void affiche_nom();
    		void affiche_prenom();
    		void affiche_age();
    		void modif_nom(char *);
    		void modif_prenom(char *);
    		void modif_age(int);
    		virtual void print(ostream& out);
     
    };
     
    /*CONSTRUCTEURS*/
     
    /************/
    Personne::Personne(char* nom, char* prenom, int age) {
     
    cout<<" CREATION D'UNE FICHE 'PERSONNE' ----> "<<endl;
    cout<<"-------------------------------"<<endl;
    cout<<endl;
     
    cout<<"Nom: "<<nom<<endl;
    cout<<"Prenom: "<<prenom<<endl; 
    cout<<"Age: "<<age<<endl;
    cout<<endl;
    }
     
    /*DESTRUCTEUR*/
    Personne::~Personne(){
    	cout<<"Destruction de la personne ..."<<endl;
    delete(p);
    }
     
    //Fonction affiche nom
    void Personne::affiche_nom(){
    	cout<<"Nom: "<<Personne::nom<<endl;
    	}
    //Fonction affiche prenom
    void Personne::affiche_prenom(){
    	cout<<"Prenom: "<<Personne::prenom<<endl;
    	}
     
    //Fonction affiche age
    void Personne::affiche_age(){
    	cout<<"Age: "<<Personne::age;
    	}
     
     
    //Fonction modif_nom
    void Personne::modif_nom(char *n){
    cout<<"Modification du nom: "<<endl;
    cin>>Personne::nom[LONGNOM];	
    }
     
     
    //Fonction modif_prenom
    void Personne::modif_prenom(char *n){
    cout<<"Modification du prenom: "<<endl;
    cin>>Personne::prenom[LONGNOM];
    }
     
    //Fonction modif_age
    void Personne::modif_age(int a){
    cout<<"Modification de l'age: "<<endl;
    cin>>Personne::age;
    }
     
    //Fonction Print
     
    void Personne::print(ostream& out) {
     
      out << nom << " " << prenom << ", ";
      out << age << " ans." << endl;
     
    }
     
     
     
    //*********************************
    //CLASSE ETUDIANT
    //*********************************
     
    class Etudiant : virtual public Personne{
     
    protected: 
     
    char matieres_suivi[NB_MAT][LONGNOM]; //liste de matières suivies par l'élève
    int notes[20]; //liste de notes de l'élève
     
    class Etudiant *p;
     
     
    public:	Etudiant();
    		Etudiant(char* , char*, int, char*);
    		~Etudiant();
     
    		void affiche_matieres();
    		void affiche_note();	
    		void get_note(int);	
    		int Moyenne(int);
    		virtual void print(ostream& out);
    };
     
    /*CONSTRUCTEURS*/
    /************/
     
    Etudiant::Etudiant(char* nom, char* prenom, int age, char *matieres_suivi) : Personne(nom, prenom, age){
     
    cout<<" CREATION D'UNE FICHE 'ELEVE' --->"<<endl;
    cout<<"------------------------- ---"<<endl;
    cout<<endl;
     
    cout<<"Nom de l'etudiant: "<<nom<<endl;
    cout<<"Prenom: "<<prenom<<endl; 
    cout<<"Age: "<<age<<endl;
    cout<<"Matieres suivies: "<<matieres_suivi<<endl;
    cout<<endl;
    }
     
    /*DESTRUCTEUR*/
    Etudiant::~Etudiant(){
    	cout<<"Destruction de la fiche eleve..."<<endl;
    delete(p);
    }
     
     
    //Fonction affiche_matières
    void Etudiant::affiche_matieres(){
    	cout<<"Liste des matieres suivies par l'Etudiant: "<<endl;
    	cout<<Etudiant::matieres_suivi;
    	cout<<endl;
    }
     
    //Fonction affiche_note
     
    void Etudiant::affiche_note(){
     
    cout<<"Affichage des notes de l'etudiant (si il y en a) : "<<endl;
    for (i=0; i>20; i++){
    	cout<<notes[i];
    }
     
    }
     
    //Fonction get_note pour affecter une note
    void Etudiant::get_note(int){
     
    cout<<"Affectation d'une note a l'etudiant: "<<endl;
    cout<<"-----------------------------------"<<endl;
     
    	cout<<"Entrez une note: "<<endl;
    	cin>>Etudiant::notes[i];
    }
     
     
     
     
    //Fontion Moyenne: pour calculer la moyenne des notes de l'étudiant
    int Etudiant::Moyenne(int){
     
    int nb_note;
    int moy=0;
     
    Etudiant::affiche_note();	//affiche les note de l'etudiant
     
    cout<<"De combien de notes cet élève dispose-t-il? "<<endl;
    cin>>nb_note;
     
    for(i=0; i<nb_note; i++){
    	moy= moy + Etudiant::notes[i];
    }
     
    moy= moy/nb_note;
     
    return moy;
    }
     
     
    //Fonction Print
     
    void Etudiant::print(ostream& out) {
     
      out << nom << " " << prenom << ", ";
      out << age << " ans." << endl;
      out << matieres_suivi <<endl;
     
    }
     
     
     
     
    //***********************************
    //CLASSE ENSEIGNANT
    //***********************************
     
    class Enseignant : virtual public Personne{
     
    protected: 
     
    char matieres_enseig[NB_MAT][LONGNOM]; //liste de matières enseignées
    int tarif;
     
    class Enseignant *p;
     
    public:	Enseignant();
    		Enseignant(char*, char*, int, char*, int);
    		~Enseignant();
     
    		void affiche_matieres_ens();
    		void heure_tt(int);
    		void cout_ens(int);
    		virtual void print(ostream& out);
    };
     
    /*CONSTRUCTEURS*/
    /************/
    Enseignant::Enseignant(char* nom, char* prenom, int age, char *matieres_enseig, int tarif) : Personne(nom, prenom, age){
     
    	cout<<"CREATION D'UNE FICHE ENSEIGNANT"<<endl;
    	cout<<"-------------------------------"<<endl;
    	cout<<endl;
     
    	cout<<"Nom de l'enseignant: "<<nom<<endl;
    	cout<<"Prenom: "<<prenom<<endl; 
    	cout<<"Age: " <<age<<endl; 
    	cout<<"Matiere enseignees: "<<matieres_enseig<<endl;
    	cout<<"Tarif Horaire: "<<tarif<<" euros."<<endl;
    	cout<<endl;    
    }
     
    /*DESTRUCTEUR*/
    Enseignant::~Enseignant(){
    	cout<<"Destruction de la fiche enseignant..."<<endl;
    delete(p);
    }
     
     
     
    //Fonction affiche_matières
    void Enseignant::affiche_matieres_ens(){
    	cout<<"Liste des matieres enseignees par ce professeur: "<<endl;
    	cout<<Enseignant::matieres_enseig;
    	cout<<endl;
    }
     
    //Fonction heure_tt: pour le calcul des heures totales
    void Enseignant::heure_tt(int){
    int nb_dh;
    int x=1;
    htt=0;
     
    cout<<"Saisie du nombre d'heures enseignees par matieres:"<<endl;
    cout<<"--------------------------------------------------"<<endl;
     
    for(i=0; i<5; i++){
    	cout<<"Veuillez saisir le nombre d'heures totales enseigné pour matiere "<<x<<": "<<endl;
    	cin>>nb_dh;
     
    htt=htt+nb_dh;
     
    x++;
    }
     
    cout<<"Total des heures: "<<endl;
    cout<<htt<<endl;
    cout<<endl;
    }
     
     
    //Fonction coût: pour le calcul du cout total de l'enseignant
    void Enseignant::cout_ens(int){
    ctt=0;
     
    ctt= htt*tarif;
     
    cout<<"Coût total de l'enseignant: "<<endl;
    cout<<ctt;
    }
     
    //Fonction Print
     
    void Enseignant::print(ostream& out) {
     
      out << nom << " " << prenom << ", ";
      out << age << " ans." << endl;
      out << matieres_enseig <<endl;
      out << tarif <<endl;
     
    }
     
     
    //*****************************
    //CLASSE ETUDIANT_ENSEIGNANT
    //*****************************
     
     
    class Etudiant_Enseignant : public Etudiant, public Enseignant {
     
    class Etudiant_Enseignant *d;
     
    public:	
     
        Etudiant_Enseignant();
    	Etudiant_Enseignant(char *, char *, int, char*, char*, int);
    	~Etudiant_Enseignant();
     
    	virtual void print(ostream& out);
     
    };
     
     
    //CONSTRUCTEUR:
    //*************
     
    Etudiant_Enseignant::Etudiant_Enseignant(char* nom, char* prenom, int age, char* matieres_suivi, 
    char* matieres_enseig, int tarif) : Personne(nom, prenom, age),
      Etudiant(nom, prenom, age, matieres_suivi), Enseignant(nom, prenom, age, matieres_enseig, tarif){
     
    	cout<<"CREATION D'UNE FICHE ETUDIANT - ENSEIGNANT: "<<endl;
    	cout<<"--------------------------------------------"<<endl;
    	cout<<endl;
     
    	cout<<"Nom et prenom de l'Etudiant enseignant: "<<nom<<" "<<prenom<<endl; 
    	cout<<"Age: " <<age<<endl;
        affiche_matieres();
    	cout<<"Matiere enseignees: "<<matieres_enseig<<endl;
    	cout<<"Cout de l'etudiant enseignant: "<<tarif<<" euros"<<endl;
    	cout<<endl;
    }
     
     
     
    //DESTRUCTEUR
    //***********
    Etudiant_Enseignant::~Etudiant_Enseignant(){
     
    	cout<<"Destruction de la fiche Etudiant enseignant ..."<<endl;
     
    delete(d);
    }
     
     
    //FONCTION PRINT POUR LA CLASS
    //ETUDIANT ENSEIGNANT
    //*******************
     
    void Etudiant_Enseignant::print(ostream& out){
     
      out << nom << " " << prenom << ", ";
      out << age << " ans." << endl;
      out << matieres_suivi <<endl;
      out << matieres_enseig <<endl;
      out << tarif <<endl;
    }
     
     
     
     
     
     
    //********************************
    //OPERATEUR DE SORTIE PERMETTANT
    //D'AFFICHER LES CARACTERISTIQUES
    //D'UNE PERSONNE:
    // Surcharge de l'opérateur <<
    //********************************
     
    ostream& operator <<(ostream& o, Personne& q)
    {
      q.print(o);
      return o;
    }
     
     
    //***********************
    //EXECUTION DU PROGRAMME:
    //***********************
     
    int main(void){
     
    cout<<"DEVOIR 9 en C++ : exercice numero 1"<<endl;
    cout<<"-----------------------------------"<<endl;
    cout<<endl;
     
    Personne pe("Laura","Taratata",45);
    Etudiant et("Enrico","Haricot",16,"Maths");
    Enseignant es("Frank","Ce",50,"Francais",9);
    Etudiant_Enseignant ee("Gerard", "Menvussa", 23, "Maths/Physique", "Maths", 8);
     
     
    cout<<"****************************************************************"<<endl;
    cout<<"AFFICHAGE DES PERSONNES GRACE A LA SURCHARGE DE L'OPERATEUR << : "<<endl;
    cout<<"****************************************************************"<<endl;
    cout<<endl;              
     
        cout<<"Affichage d'une fiche Personne:"<<endl;
        cout<<"*******************************"<<endl;
    	cout<<pe<<endl;
    	cout<<endl;
     
    	cout<<"Affichage d'une fiche Etudiant:"<<endl;
    	cout<<"*******************************"<<endl;
    	cout<<et<<endl;
    	cout<<endl;
     
    	cout<<"Affichage d'une fiche Enseignant:"<<endl;
    	cout<<"*********************************"<<endl;
    	cout<<es<<endl;
    	cout<<endl;
     
    	cout<<"Affichage d'une fiche Etudiant_Enseignant:"<<endl;
    	cout<<"******************************************"<<endl;
    	cout<<ee<<endl;
    	cout<<endl;
     
    	cout<<"*****************"<<endl;
    	cout<<"FIN DU PROGRAMME!"<<endl;
    	cout<<"*****************"<<endl;
    	cout<<endl;
     
     
    getchar();
    }

    Le but est donc de définir l'opérateur de sortie permettant d'afficher les caractéristiques d'une personne, d'un étudiant, d'un enseignant, d'un étudiant enseignant.

    Lorsque je compile avec DEVC++ il ne me trouve aucune erreur mais lors de l'execution du programme les données ne s'affichent pas.
    Enfin si mais non... ahum je m'explique par exemple:

    Affichage d'une fiche étudiant:
    0x22f684 0x22f9f4, 2089938456 ans.
    0x22f824
    4
    C'est la première fois que ça me fait ça et j'avoue que je ne trouve pas d'ou ça viens

    Mais je suis une débutante alors je pense que j'ai mal fait mon code, seulement ou ...

    Quelqu'un à une idée ou un conseil?

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bonjour,

    Le premier problème vient du fait que tu passes des char [NB_MAT][LONGNOM] (la variable matière_suivi) à std::cout qui n'a pas le moindre idée sur la manière d'afficher des tableaux de tableaux de char.

    Et le deuxième problème :

    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
     
    Personne::Personne(char* nom, char* prenom, int age) {
     
    cout<<" CREATION D'UNE FICHE 'PERSONNE' ----> "<<endl;
    cout<<"-------------------------------"<<endl;
    cout<<endl;
     
    cout<<"Nom: "<<nom<<endl;
    cout<<"Prenom: "<<prenom<<endl; 
    cout<<"Age: "<<age<<endl;
    cout<<endl;
    }
     
    void Personne::print(ostream& out) {
     
      out << nom << " " << prenom << ", ";
      out << age << " ans." << endl;
    }
    Le constructeur de Personne ne stocke pas le nom, le prénom et l'âge dans ses données membres! Quand le programme passe dans le fonction membre print un peu plus tard il affiche donc n'importe quoi car les membres n'ont pas été initialisés...

    Conseil 1 : Remplacer tous les char* et char[] par des std::string.
    En effet, std::cout et std::cin ont été conçu pour fonctionner main dans la main avec std::string, il est donc beaucoup plus facile de les manier ensemble. De plus, std::string est plus simple à utiliser que des char*, par exemple une std::string accepte des textes de tailles quelconques, il n'y aurait donc plus besoin de restrictions artificielles comme LONGNOM et LONG_COMMENT.

    Conseil 2 : Remplacer les tableaux par des std::vector. La encore tu n'aurais plus besoin d'avoir la restriction NB_MAT = 5 car les std::vector se redimensionnent automatiquement quand on leur ajoute des éléments.

    Quelques commentaires sur le code :

    1. Amusant, la gestion du polymorphisme, qui n'est pas si évidente que ça, est parfaitement correcte. Par contre il y a de jolies erreurs avec des pointeurs... Javaiste ?

    2. Un détail : Etudiant(char* , char*, int, char*);
    Généralement, on met le nom des variables dans la déclaration du constructeur, car c'est là qu'une personne qui ne connait pas le code va d'abord regarder.

    3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Personne
    {
    ...
    char* nom[LONGNOM];
    ...
    };
    Écrit comme ça, "nom" est un tableau de taille LONGNOM dont chaque case contient un char*.
    Il est plus probable que nom ait besoin d'être un tableau de char. Mais la meilleure solution reste naturellement une std::string.

    4.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char matieres_suivi[NB_MAT][LONGNOM]; //liste de matières suivies par l'élève
    int notes[20]; //liste de notes de l'élève
    De même on utilisera de préférence en C++ :
    std::vector<std::string> matieres_suivi;
    std::vector<int> notes;

    5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Etudiant
    {
    ...
    class Etudiant* p;
    ...
    }
     
    Etudiant::~Etudiant()
    {
       delete p;
    }
    Oula
    Là, tu déclares dans la classe Etudiant un pointeur sur une autre classe Etudiant. Sauf que ce ce pointeur n'est jamais utilisé. Il n'est d'ailleurs même pas initialisé. Donc en l'état il est inutile et tu peux le supprimer, ainsi que le destructeur qui ne sert à rien.

    6. Avec un niveau de warning W4, le compilateur trouve des variables non utilisés. Par exemple le paramètre "int a" n'est pas utilisé dans ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Fonction modif_age
    void Personne::modif_age(int a){
    cout<<"Modification de l'age: "<<endl;
    cin>>Personne::age;
    }
    D'ailleurs pas besoin de faire Personne::age ici, car les données membres privées sont directement accessible dans les méthodes membres (c'est le but ) : cin << age;

    7. Enfin dernier point, le programme est un peu bizarre, il n'a pas de mémoire. Tous les infos passées aux classes sont affichées dans la foulée mais ne sont pas stockés. Je suppose que c'est l'étape suivante...

  3. #3
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Pfffffiouuuu !!!!!



    Merci pour cette longue explication !!
    JE vais tout de suite me remettre au travail alors

    . Amusant, la gestion du polymorphisme, qui n'est pas si évidente que ça, est parfaitement correcte. Par contre il y a de jolies erreurs avec des pointeurs... Javaiste ?
    On va dire que Educatel n'est pas ce que je conseillerais de mieux à quelqu'un qui veut faire ce genre de chose...
    Alors je me débrouille avec le peu de chose que j'ai et vive la recherche internet !!!!!



    Par exemple, mes cours ne mensionnent pas les std::string ou autres "std::trucs"

    Oui, merci Educatel


    En tout cas merci pour cette super réponse!

  4. #4
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Me revoilà !!

    Conseil 1 : Remplacer tous les char* et char[] par des std::string...
    C'est fait !

    Remplacer les tableaux par des std::vector...
    C'est également fait !!

    J'ai donc bien ajouté également les:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include<vector>
    #include<string>
    (il a fallu que j'aille trouve du cours là dessus ...)

    LONGNOM et LONG_COMMENT ... NB_MAT
    ont été donc supprimés !!


    Mais une erreur se pose.
    Enfin plusieurs.
    Avec mes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<int> notes;
    vector<string> matieres_suivi
    Effectivement voilà ce que VS me note :

    1> error C2679: '<<' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::vector<_Ty>' (ou il n'existe pas de conversion acceptable)
    à cet endroit là par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .....
    cout<<matieres_suivi;
    .....
    Pourquoi donc ?

    J'ai regardé dans les tuto ici, pour std::vector mais je ne vois pas la différence, ou l'erreur qui se pose.
    Un mauvais réglage dans mes options?
    Je ne pense pas car même en compilant avec DVC++ j'ai les mêmes erreurs ...


  5. #5
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par mouchT8 Voir le message
    Mais une erreur se pose.
    Enfin plusieurs.
    Avec mes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<int> notes;
    vector<string> matieres_suivi
    Effectivement voilà ce que VS me note :



    à cet endroit là par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .....
    cout<<matieres_suivi;
    .....
    Pourquoi donc ?

    J'ai regardé dans les tuto ici, pour std::vector mais je ne vois pas la différence, ou l'erreur qui se pose.
    Un mauvais réglage dans mes options?
    Je ne pense pas car même en compilant avec DVC++ j'ai les mêmes erreurs ...

    Il faut parcourir le std::vector pour afficher son contenu.

    A la mode tableau C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int size = myVector.size();
    for (int i = 0; i < size; ++i)
      std::cout << myVector[i] << std::endl;
    Ou en utilisant un iterateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::vector<std::string>::iterator it;
    std::vector<std::string>::iterator end;
    it = myVector.begin();
    end = myVector.end();
    while (it != end)
    {
        std::cout << *it << std::endl;
        ++it;
    }
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  6. #6
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Bon ben, le programme doit être un peu plus clair.

    Pour matiere_suivi, C'est à peu près la même chose que :
    Le premier problème vient du fait que tu passes des char [NB_MAT][LONGNOM] (la variable matière_suivi) à std::cout qui n'a pas le moindre idée sur la manière d'afficher des tableaux de tableaux de char.
    std::cout ne sait pas comment afficher des vecteurs, ni des tableaux[], ni quoi que ce soit excepté des string et des char.

    D'ailleurs le compilo se plaint à juste titre :
    "<<' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::vector<_Ty>' (ou il n'existe pas de conversion acceptable)".

    Il ne sais pas quoi faire de vector<Quelquechose>.

    Il faut donc que tu fournisses à std::cout des string, c'est à dire ici chaque matière une par une, avec une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(unsigned int i = 0 ; i < matiere_suivi.size() ; i++)
    {
       std::cout << matiere_suivi[i] << " ";
    }

  7. #7
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    OK, c'est parfait !!
    Merci beaucoup !!

    Me reste juste une question qui m'intrigue.

    Voilà dans le tuto parlant de std::vector il y a ceci :

    // faire la somme de tous les éléments de v3
    .....
    cout << std::accumulate( v3.begin(), v3.end(), 0 ) << '\n';
    Or dans mon programme je dois calculer la moyenne d'un élève à partir de mon tableau de notes.

    J'ai tenté d'utiliser cette formule pour tout au moins déjà faire la somme des éléments de mon tableau mais VS de connait pas "accumulate" .

    C'est normal?

  8. #8
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Il faut inclure le header <algorithm>.
    C'est là que se trouve tous les algorithmes comme std::accumulate, std::sort, std::find etc.

  9. #9
    Membre du Club Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Points : 49
    Points
    49
    Par défaut
    Très bien !

    Merci beaucoup tout marche parfaitement !
    Sans votre aide je n'y serait jamais arrivé !
    En tout cas, pas avec mes livres de cours de base incomplets !

    Je ne remercierais jamais assez Developpez.com et ses membres pour toute l'aide qu'ils m'ont apporté depuis que je fais cette formation chez Educatel

    A bientot!

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

Discussions similaires

  1. [RegEx] Problème d'affichage d'un else en cas d'erreur
    Par Mr[ben] dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2007, 14h04
  2. Problème d'affichage d'erreur avec un spool
    Par hokidoki dans le forum SQL
    Réponses: 0
    Dernier message: 13/11/2007, 10h49
  3. Problème d'affichage -> Erreur de boot
    Par virgul dans le forum Windows XP
    Réponses: 4
    Dernier message: 23/08/2007, 16h51
  4. maven 2 problème erreur de compilation
    Par jigz77 dans le forum Maven
    Réponses: 5
    Dernier message: 02/08/2007, 11h15
  5. [JpGraph] Problème d'affichage d'erreurs
    Par cbv38 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2007, 10h55

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