Partage
  • Partager sur Facebook
  • Partager sur Twitter

Build Error

Sujet résolu
    2 janvier 2008 à 13:05:09

    Bonjour,

    Je voudrais créer 3 types de constructeurs dans mon programme, mais le programme ne s’exécute pas. On m’affiche ces deux erreurs que je vois pour la première fois :

    1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Notes::~Notes(void)" (??1Notes@@QAE@XZ) referenced in function _main
    1>C:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex1tp3\Debug\ex1tp3.exe : fatal error LNK1120: 1 unresolved externals
    1>Build log was saved at "file://c:\Documents and Settings\khaoula\Mes documents\Visual Studio 2005\Projects\ex1tp3\ex1tp3\Debug\BuildLog.htm"
    1>ex1tp3 - 2 error(s), 0 warning(s)


    Voici les fichiers que j’ai créés :

    notes.h :
    1. #include<iostream>
    2. class Notes
    3. {
    4. private :
    5.         float test1, test2;
    6.         float DS, Examen;
    7.         float orale, TP;
    8.         bool avecTP;
    9. public :
    10.         Notes():test1(0), test2(0), DS(0), Examen(0), orale(0), TP(0), avecTP(true){}
    11.         Notes(float t1, float t2, float d, float E, float o, float tp):test1(t1), test2(t2), DS(d), Examen(E), orale(o), TP(tp), avecTP(true){}
    12.         Notes(float t1, float t2, float d, float E, float o):test1(t1), test2(t2), DS(d), Examen(E), orale(o), avecTP(false){}
    13.         float CalculNCC();
    14.         float CalculMoyenne();
    15.         ~Notes();
    16. };
    17. notes.cpp :
    18. #include"notes.h"
    19. float Notes::CalculNCC()
    20. {
    21.         return (test1+test2+orale+2*DS)/5;
    22. }
    23. float Notes::CalculMoyenne()
    24. {
    25.         if(avecTP)
    26.             return (0.3 * CalculNCC()) + (0.3 * TP)+(0.4 * Examen);
    27.         else
    28.                 return (0.4 * CalculNCC()) + (0.6 * Examen);
    29. };






    main.cpp :

    1. #include"notes.h"
    2. using namespace std;
    3. void main()
    4. {
    5.         Notes N1(10, 12, 15, 11, 17, 9.5);
    6.         Notes N2(11.5, 13, 18, 10, 12.5);
    7.         cout<<"NCC1 = "<<N1.CalculNCC()<<"M1 = "<<N1.CalculMoyenne()<<endl;
    8.     cout<<"NCC2 = "<<N2.CalculNCC()<<"M2 = "<<N2.CalculMoyenne()<<endl;
    9.         if(N1.CalculMoyenne() > N2.CalculMoyenne())
    10.                 cout<<"M1 est plus grand";
    11.         else
    12.                 cout<<"M2 est plus grand";
    13. }





    Merci de vos réponses :)
    • Partager sur Facebook
    • Partager sur Twitter
      2 janvier 2008 à 17:19:34

      Il n'y a pas de ; à la fin de la dernière fonction de Notes.cpp

      Sinon, de manière générale:
      1) Il manque le return 0 dans le main.
      2) Pourquoi inclure <iostream> dans la classe si tu ne l'utilises pas.
      3) Est-ce vraiment une bonne idée de faire un constructeur prenant en argument un certain nombre de notes. Ne vaudrait-il pas mieux faire un constructeur qui prend un tableu en argument ?
      4) la signature du main n'est pas correcte.

      Ce ne sont là que des remarques pour améliorer la manière dont tu codes.

      Happy coding !
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        2 janvier 2008 à 19:30:22

        Salut,
        Merci de m'avoir répondu, j'ai enlevé le point virgule dont tu parlais et ça m'a généré des erreurs en plus.
        Le type d ema fonction main est void, donc elle n'est pas censée de rien retourner.
        :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          2 janvier 2008 à 19:40:02

          Classiquement, une fonction main n'est pas du type void mais du type int, afin de pouvoir retourner EXIT_SUCCESS ou EXIT_FAILURE (cf tuto officiel de C++).
          Le mieux c'est donc de changer le type de ta fonction main et insérer un return.
          • Partager sur Facebook
          • Partager sur Twitter
            2 janvier 2008 à 19:51:40

            Je plussoie la réponse de Neki.

            Sinon pour ta première erreur, tu as oublié de définir le destructeur de Notes. Tu as juste mis le prototype. 2 solutions:

            1) Tu définins le destructeur
            2) Tu enlèves le prototype et tu laisse le compilo le générer

            La solution 2 est ici largement suffisante.
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              2 janvier 2008 à 20:09:44

              Resalut,

              J'ai changé le type de ma fonction main.

              Pour le destructeur, je ne vois pas comment le définir.. Je pensais que ça se définit ainsi : ~Notes();

              Quand je l'ai enlevé, le programme avait tourné normalement. Mais j'aime bien apprendre comment l'écrire.

              Merci à vous :)
              • Partager sur Facebook
              • Partager sur Twitter
                2 janvier 2008 à 21:39:41

                Ben ici, pas besoin de l'écrire toi même, vu que le destructeur ne fait... Rien. Si tu veux vraiment l'écrire (pour rajouter des choses dedans si tu modifies ta classe, par exemple), alors il y a ça :

                1. Notes::~Notes()
                2. {
                3. }


                ou encore

                1. class Notes
                2. {
                3. private :
                4.         float test1, test2;
                5.         float DS, Examen;
                6.         float orale, TP;
                7.         bool avecTP;
                8. public :
                9.         Notes():test1(0), test2(0), DS(0), Examen(0), orale(0), TP(0), avecTP(true){}
                10.         Notes(float t1, float t2, float d, float E, float o, float tp):test1(t1), test2(t2), DS(d), Examen(E), orale(o), TP(tp), avecTP(true){}
                11.         Notes(float t1, float t2, float d, float E, float o):test1(t1), test2(t2), DS(d), Examen(E), orale(o), avecTP(false){}
                12.         float CalculNCC();
                13.         float CalculMoyenne();
                14.         ~Notes() {}
                15. };
                • Partager sur Facebook
                • Partager sur Twitter
                J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.

                Build Error

                × 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