Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C++] error C2228

Sujet résolu
    2 janvier 2008 à 10:47:41

    Bonjour,

    J’ai écrit un programme qui permet de créer des bâtiments comportant chacun des bureaux où des employés peuvent se déplacer d’un bureau à un autre. J’ai dix erreurs que je n’arrive pas à corriger.
    Mes fichiers .h, . cpp et ma main sont les suivants :

    bureau.h :

    #include<iostream>

    class bureau
    {
    int num;
    bool ouvert;

    public :
    bureau(int n):num(n), ouvert(false){}

    int getnum(){return num;}
    void setnum (int n){num=n;}

    bool ouverture(){return ouvert;}

    void ouvrir()
    {ouvert=true;}

    void fermer()
    {ouvert=false;}

    ~bureau();
    };



    batiment.h :

    #include<iostream>
    #include"bureau.h"

    class batiment
    {
    protected :
    int num;
    int nbbur;
    public :
    batiment(int n, int nb):num(n),nbbur(nb){}
    int getnum() {return num;}
    void setnum(int n) {num = n;}
    int getnbbur() {return nbbur;}
    void setnbbur(int n) {nbbur=n;}
    ~batiment();
    };



    employe.h :

    #include"batiment.h"
    #include"bureau.h"
    using namespace std;

    class employe
    {
    private :
    bureau bur;
    batiment bat;
    public :
    employe(batiment ba, int num):bur(num), bat(ba){}
    void aller(batiment ba, int n)
    {
    bureau B(n);
    if(bur.ouverture()==false)
    {
    bur.ouvrir();
    cout<<"l'employe ouvre le bureau"<<bur.getnum()<<endl;
    }
    if(ba.getnum()!= bat.getnum())
    {
    cout<<"je quitte le batiment"<<bat.getnum()<<endl;
    bat.setnum(ba.getnum();
    cout<<"je suis arrive au batiment "<<bat.getnum()<<endl;
    }
    else
    cout<<"je reste dans le batiment"<<endl;
    cout<<"j'ouvre le bureau "<<n<<endl;
    B.ouvrir();
    bur.setnum(n);
    cout<<"j'arrive au bureau "<<n<<endl;
    }
    };


    main.cpp :

    #include<iostream>
    #include"employe.h"

    void main()
    {
    batiment b1(1,3);
    batiment b2(2,4);
    employe E(b1,3);
    E.aller(b2,2);
    }



    Excellente journée :)


    <code type="cpp">
    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2008 à 10:52:09

      Bonjour et bonne année !
      Pourrais-tu nous envoyer les erreurs ?
      Pourrais-tu mettre ton code dans la balise code ?
      • Partager sur Facebook
      • Partager sur Twitter
        2 janvier 2008 à 10:59:01

        Citation : At0mIks

        Bonjour et bonne année !
        Pourrais-tu nous envoyer les erreurs ?
        Pourrais-tu mettre ton code dans la balise code ?


        +1
        Avec les balises, c'est mieux lisible :D
        • Partager sur Facebook
        • Partager sur Twitter

        La maîtrise des fondamentaux est le fondamental de la Maîtrise.

          2 janvier 2008 à 11:14:02

          pan class="br0">}


          Merci d'avance !
          Bonne année :)
          , 1, ''); return false;" class="code_lien_numerotation">Afficher / masquer les numéros de ligne
          1. <code type="cpp">
          2. #include<iostream>
          3. class bureau
          4. {
          5.         int num;
          6.         bool ouvert;
          7. public :
          8.         bureau(int n):num(n), ouvert(false){}
          9.         int getnum(){return num;}
          10.         void setnum (int n){num=n;}
          11.     bool ouverture(){return ouvert;}
          12.     void ouvrir()
          13.         {ouvert=true;}
          14.     void fermer()
          15.         {ouvert=false;}
          16.         ~bureau();
          17. };</code>


          batiment.h :

          1. #include<iostream>
          2. #include"bureau.h"
          3. class batiment
          4. {
          5. protected :
          6.         int num;
          7.         int nbbur;
          8. public :
          9.         batiment(int n, int nb):num(n),nbbur(nb){}
          10.         int getnum() {return num;}
          11.         void setnum(int n) {num = n;}
          12.         int getnbbur() {return nbbur;}
          13.         void setnbbur(int n) {nbbur=n;}
          14.         ~batiment();
          15. };


          1. employe.h :
          2. #include"batiment.h"
          3. #include"bureau.h"
          4. using namespace std;
          5. class employe
          6. {
          7.         private :
          8.                 bureau bur;
          9.                 batiment bat;
          10.         public :
          11.                 employe(batiment ba, int num):bur(num), bat(ba){}
          12.                 void aller(batiment ba, int n)
          13.                 {
          14.                         bureau B(n);
          15.                         if(bur.ouverture()==false)
          16.                         {
          17.                                 bur.ouvrir();
          18.                             cout<<"l'employe ouvre le bureau"<<bur.getnum()<<endl;
          19.                         }
          20.                         if(ba.getnum()!= bat.getnum())
          21.                         {
          22.                                 cout<<"je quitte le batiment"<<bat.getnum()<<endl;
          23.                                 bat.setnum(ba.getnum();
          24.                                 cout<<"je suis arrive au batiment "<<bat.getnum()<<endl;
          25.                         }
          26.                         else
          27.                                 cout<<"je reste dans le batiment"<<endl;
          28.                             cout<<"j'ouvre le bureau "<<n<<endl;
          29.                                 B.ouvrir();
          30.                                 bur.setnum(n);
          31.                                 cout<<"j'arrive au bureau "<<n<<endl;
          32.                 }
          33. };


          main.cpp :
          1. #include<iostream>
          2. #include"employe.h"
          3. void main()
          4. {
          5.         batiment b1(1,3);
          6.         batiment b2(2,4);
          7.         employe E(b1,3);
          8.         E.aller(b2,2);
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2008 à 11:20:29

            Il faudrait peut-être que tu postes les erreurs aussi... D'après une rapide recherche sur Google, il semblerait que l'erreur c2228 se rapporte aux chaînes de caractères, peut-être un problème avec tes cout ? Bonne chance :)
            • Partager sur Facebook
            • Partager sur Twitter
              2 janvier 2008 à 11:23:06

              1>main.cpp
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\bureau.h(4) : error C2011: 'bureau' : 'class' type redefinition
              1> c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\bureau.h(4) : see declaration of 'bureau'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(8) : error C2079: 'employe::bur' uses undefined class 'bureau'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(25) : error C2958: the left parenthesis '(' found at 'c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(23)' was not matched correctly
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(14) : error C2079: 'B' uses undefined class 'bureau'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(15) : error C2228: left of '.ouverture' must have class/struct/union
              1> type is 'int'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(17) : error C2228: left of '.ouvrir' must have class/struct/union
              1> type is 'int'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(18) : error C2228: left of '.getnum' must have class/struct/union
              1> type is 'int'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(23) : error C2143: syntax error : missing ')' before ';'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(29) : error C2228: left of '.ouvrir' must have class/struct/union
              1> type is 'int'
              1>c:\documents and settings\khaoula\mes documents\visual studio 2005\projects\ex5tp3\ex5tp3\employe.h(30) : error C2228: left of '.setnum' must have class/struct/union
              1> type is 'int'
              1>Build log was saved at "file://c:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex5tp3\ex5tp3\Debug\BuildLog.htm"
              1>ex5tp3 - 10 error(s), 0 warning(s)
              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2008 à 22:18:28

                Déja, d'aprè ce que j'ai vu globalement, tu ne dois pas mettre le corps de tes foncions dans le .h, mets les prototypes seulement. c'est de là que vient le problème.
                1- les .h sont faits pour mettre les prototypes.
                2- les .cpp (.c) sont faits pour mettre les corps (tout le code qui ne doit pas être mis dans le .h
                Voila j'espère t'avoir été utile.
                • Partager sur Facebook
                • Partager sur Twitter

                La maîtrise des fondamentaux est le fondamental de la Maîtrise.

                  3 janvier 2008 à 17:17:18

                  fissal_houate > pour des si petits corps on peut très bien les mettre dans les .h
                  EDIT : J'avais pas vu la méthode aller de employer : elle, elle peut être mise dans un .cpp

                  l'erreur 1 (et peut-être la seule) est que tu inclus bureau.h dans batiment.h et batiement.h est inclus AVEC bureau.h dans employe.h... le tout sans garde anti-inclusion multiple : FAQ Developpez premier exemple

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 janvier 2008 à 21:28:52

                    Salut,

                    J'ai ajouté la parenthèse dans employe.h au niveau de
                    1. bat.setnum(ba.getnum();
                    et défini les destructeurs
                    1. ~bureau();
                    et
                    1. ~batiment();
                    qui étaient seulement déclarés.
                    Le programme a tourné quand j'ai supprimé cet include :
                    1. #include"bureau.h"
                    au niveau du fichier employe.h

                    Bon week end :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [C++] error C2228

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown