Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment cree un include

et evite les bogue de redefinition

Sujet résolu
    2 mai 2006 à 10:33:25

    je veux me cree un fichier .cpp qui contienne des fonctions que j'utilise souvent. et puisque je les utilise dans plusieur de mes programes je me suis cree un fichier .cpp ou j'ai ecris mes fonctions, et un .h ou j'ai mes declaration. Ensuite je met cela dans le dossier include de mon compilateur (je suis avec code::block).

    mais voila quand je fais #include<fonc_gen.h> il me donne l'erreure "multiple definition of '...' "

    j'ai bien evidament mit le #ifndef fonc_gen_h, #define fonc_gen_h et #endif
    mais il fait quand meme se probleme au linkage lorsque j'inclus fonc_gen.h dans plus d'un fichier de mon projet... par exemple dans editeur.cpp et dans jeu.cpp.

    alors comment est-ce que je suis sense pouvoir faire un include sans qu'il y est ce probleme, un peu comme n'importe quel autre include standard ( le iostream ou le stdio on peu les mettre dans tout les fichiers sans probleme.)
    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2006 à 11:03:43

      Citation : djo0012

      je veux me cree un fichier .cpp qui contienne des fonctions que j'utilise souvent. et puisque je les utilise dans plusieur de mes programes je me suis cree un fichier .cpp ou j'ai ecris mes fonctions, et un .h ou j'ai mes declaration.


      .cpp, on suppose donc que c'est du C++...

      Voici comment je fais en C :

      http://mapage.noos.fr/emdel/codage.htm#organiser_source
      http://mapage.noos.fr/emdel/codage.htm#organiser

      Pose des questions si tu ne comprends pas. Poste ton code.
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        2 mai 2006 à 12:16:34

        comme tu as dit oui je code en c++ et puisque tu la demande voici mes fichiers, j'ai couper les fonctions parce que sa fait long mais tout ce qui est nescessaire d'apres moi est la.

        sdl_gen.h

        #ifndef sdl_gen_h
        #define sdl_gen_h

        #include<SDL.h>
        #include<sdl_ttf.h>

        enum{F,G};

        SDL_Surface* loadfont(int fg,const char* font,const char* txt,int r, int g, int b, int size);

        #include<sdl_gen.cpp>

        #endif  /*sdl_gen_h*/


        sdl_gen.cpp

        SDL_Surface* loadfont(int fg,const char* font,const char* txt,int r, int g, int b, int size)
        {
        //ma fonction
        }


        voila donc se que j'ai, bien entandu la fonction est ecrite a l'interieur des accolades dans le .cpp mais je ne croi pas que sa aide pour mon probleme alors je l'ai enleve mais si tu y tiens je peu la rajoute... pour l'instant je n'est qu'une seul fonction,je n'est pas rajoute les autres puisque sa ne fonctionnais pas.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          2 mai 2006 à 12:20:01

          d'après moi vaut mieux incure ton .h dans le .cpp et pas l'inverse. ou alors mettre le ifndef sur ton .cpp enfin jdi ca mais sans occune conviction lol.

          oupps je viense de comprendre ton problem lol donc ske jdi rrésou rien
          • Partager sur Facebook
          • Partager sur Twitter
            2 mai 2006 à 12:27:07

            j'ai aissayer aussi en mettent des ifndef dans mon cpp mais sa n'arrangais rien effectivement.

            et le probleme c'est que je veut mes fichier dans le dossier include du compilateur pour ne pas devoir les mettre dans chaqu'un de mes projet...
            • Partager sur Facebook
            • Partager sur Twitter
              2 mai 2006 à 13:39:00

              Citation : djo0012

              sdl_gen.h


              #ifndef sdl_gen_h
              #define sdl_gen_h

              #include<sdl_gen.cpp>

              #endif  /*sdl_gen_h*/



              Il ne faut pas inclure de .cpp dans un .h. Il ya des regles de conception (je les ai exposées). Il faut les suivre.
              Si ton projet a plusieurs fichiers .cpp, il faut les ajouter au projet, c'est tout.
              Tout cela a été parfaitement expliqué dans le cours de M@teo sur la programmation modulaire.
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                2 mai 2006 à 15:26:51

                C' est parce que les include declare au niveau du module que ces fonctions là existe, mais les définition ne doivent être incluent qu' une fois par projets.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  2 mai 2006 à 15:57:13

                  Ben alors au lieu d'inclure copi ce ke ta dans ton .cpp dans ton .h non ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 mai 2006 à 16:45:25

                    Citation : poulecaca

                    Ben alors au lieu d'inclure copi ce ke ta dans ton .cpp dans ton .h non ?


                    Tu dis vraiment n'importe quoi. Il ne doit pas y avoir de code dans un .h[1]. Tu as lu le cours de M@teo ou quoi ?

                    -------------------------------
                    [1] sauf inline et méthodes courtes définies dans les classes en C++
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                    Anonyme
                      2 mai 2006 à 20:24:42

                      Oui dsl G oubliez de dormir cette nuit je sais pas pourquoi j'ai di ca lol
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 mai 2006 à 0:32:12

                        oui quand je suis dans un projet je suis d'accord, mais ce que je veut faire la, c'est cree un include dans le genre des librairie comme le stdio.h ou n'importe quoi comme celle la...

                        je suis d'accord que je ne peu pas inclure le .cpp dans mon .h mais comment je fais pour lier mes fonction avec mon header ou elles sont definie...

                        je rapelle que je ne veut pas qu'ils soit dans mon projet mais dans le dossier include du compilateur.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 mai 2006 à 2:19:30

                          Citation : djo0012

                          oui quand je suis dans un projet je suis d'accord, mais ce que je veut faire la, c'est cree un include dans le genre des librairie comme le stdio.h ou n'importe quoi comme celle la...

                          je suis d'accord que je ne peu pas inclure le .cpp dans mon .h mais comment je fais pour lier mes fonction avec mon header ou elles sont definie...

                          je rapelle que je ne veut pas qu'ils soit dans mon projet mais dans le dossier include du compilateur.


                          Je répète, relis le cours de M@teo sur la programmation modulaire.

                          http://www.siteduzero.com/tuto-3-3040-1-la-programmation-modulaire.html

                          Il s'est cassé le c*l pour expliquer comment faire, la moindre des choses est de respecter son travail... Surtout que ce sujet n'est quasiment jamais abordé ailleurs. Alors pour une fois qu'on en parle...

                          Zêtes trop gâtés les gars...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            3 mai 2006 à 2:42:30

                            bon, j'ai relu le chapitre sur la programation modulaire comme tu me la dit, mais sa ne regle pas mon probleme puisque si je met les fichier dans mon projet et en incluant mon .h dans mon .cpp (et pas comme j'ai montre au debut de se topic) sa fonctionne et je n'est pas de probleme.

                            mais je ne veut pas mettre les fichier dans mon projet mes en include comme les librairie (donc accessible depuis n'importequel projet a n'importe quel moment.)

                            en y pensant par apres je me demande si je n'aurait pas simplement a ajoute mon fichier .cpp dans les option du linker et inclure mon .h normalement(donc sans l'inclusion du .cpp a l'interieur de celui si)

                            mais bon je ne peu pas testez presentement donc je ne sait pas si sa fonctionnerai...

                            en tout cas merci de votre aide jusqu'a present, je vais aissayer cela se soir des que je peu et je vous en reparle.


                            edit:
                            bon j'ai aissaye se que j'avais dit donc j'ai 'linker' mon .cpp dans les option du linker et j'inclue mon .h normalement avec un #include<sdl_gen.h> mais voila j'ai ses erreures qui aparaisse:
                            C:\Program Files\CodeBlocks\mingw32\include\sdl_gen.cpp:11: error: expected constructor, destructor, or type conversion before '*' token
                            C:\Program Files\CodeBlocks\mingw32\include\sdl_gen.cpp:11: error: expected `,' or `;' before '*' token


                            j'ai reteste mes fichiers dans un projet et ils fonctionnent comme il le faut, apres recherche je n'est toujours pas comprit se que ses deux erreures veulent dire. alors si vous pouvier m'explique ce que sont ses erreurs et comment les corrige ou bien comme j'avais deja demande, comment est-ce que l'on est senser pouvoir se cree une genre de librairi mais qui ne serai pas nescessairement compiler (quoi que se ne serait pas trop grave si j'etait obliger de la compiler, mais quand meme...)

                            ha oui j'oubliais, la ligne 11 de mon sdl_gen.cpp c'est la ligne de declaration de ma fonction
                            SDL_Surface* loadfont(int fg,const char* font,const char* txt,int r, int g, int b, int size)
                            {
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 mai 2006 à 12:35:16

                              Citation : djo0012

                              bon, j'ai relu le chapitre sur la programation modulaire comme tu me la dit, mais sa ne regle pas mon probleme puisque si je met les fichier dans mon projet et en incluant mon .h dans mon .cpp (et pas comme j'ai montre au debut de se topic) sa fonctionne et je n'est pas de probleme.

                              mais je ne veut pas mettre les fichier dans mon projet mes en include comme les librairie (donc accessible depuis n'importequel projet a n'importe quel moment.)


                              Mais qui te fait croire de tels mensonges ? Tu confonds encore un fichier d'entête et une bibliothèque ? Mais ça sert à quoi qu'on se casse le c*l à expliquer les choses si tu fais n'importe quoi ?

                              Jamais il n'a été dit nulle part qu'un bibliothèque était ce que tu dis. Au contraire, une bibliothèque est une collection de fonctions précompilées et regroupées dans un fichier .a ou .lib. Le header (.h) n'est que l'interface (prototypes et tous ce qu'il faut pour les définir).

                              http://mapage.noos.fr/emdel/notes.htm#bibliotheque

                              Si tu veux construire une bibliothèque, tu utilises les outils nécessaires. Avec Code:Blocks, il suffit de créer un projet 'bibliothèque statique' et d'ajouter les sources nécessaires. Donner un nom intelligent (qui commence par lib).

                              Une fois produite, cette bibliothèque doit être ajoutée au projet qui l'utilise, comme n'importe quelle autre bibliothèque.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                4 mai 2006 à 7:32:49

                                merci la je comprend comment faire, et oui il est effectivement possible que j'ai confondu librairi et header, la raison est que j'avais telecharger une "librairi" il y un bon bout de temp et elle etait fait comme j'avais presente au debut, dans ce temp la je ne fesais pas vraiment de programation modulaire donc je n'avais pas vu les probleme qui me sont arrive. mais bon...

                                alors j'ai compiler mon .cpp comme projet bibliotheque statique mais la ils me fait les deux meme erreur que j'ai dit dans mon dernier message, le probleme est que je ne comprend toujours pas ces erreure... donc je ne sait pas comment les corriger.

                                en tout cas j'ai au moin fais un pas dans le bonne direction (du moin je croi). merci de ton aide.

                                edit: finalement c'est correct, j'avais oublier de faire mes include<SDL.h> et compagnie... alors je voulais renvoyer un type de variable qui n'existait pas... alors merci pour votre aide mon probleme est finalement regle.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                comment cree un include

                                × 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