Partage
  • Partager sur Facebook
  • Partager sur Twitter

diviser son code

    25 juin 2006 à 15:35:10

    Salut, j'ai commencé à programmer depuis quelques tps, et je voudrais partionner mon code, j'ai lu le tutorial sur le sujet, mais je n'y arrive pas.
    J'ai pris une fonction de mon code, je l'ais mise dans un autre fichier .cpp, j'ai mis toutes les librairies les variables, les image set les sons, dans un fichier .h
    Mon pb, est que mon fichier .cpp, ne reconnait plus la librairies fstream, je l'ai mises partout, mais rien n'y fait.
    En fait, je suis pas sûr d'avoir tout bien compris dans la division du code, vous auriez un exmple? :euh:



    @+ :soleil:
    • Partager sur Facebook
    • Partager sur Twitter
      25 juin 2006 à 15:42:21

      Montre ton code, on y verra mieux. En revanche, je crois que tu t'es un peu embrouillé: le .h ne doit contenir que (ou presque que) les en-têtes des fonctions.
      • Partager sur Facebook
      • Partager sur Twitter
        25 juin 2006 à 16:16:25

        Voici le .cpp:

        //déclaration des librairies utilisées
        #include <allegro.h>
        #include <ctime>
        #include <fstream>


        // on le défini
        #include "librairies.h"

        int fCombat (int nMobs)
        {
           
          //Le code trés long, 1000 lignes.
                           
                            }
        nJeu = 0;         
        }


        dans ce code, j'utilise, piour une sauvegarde:

        { 
                         ofstream fichier;
                        fichier.open("sauvegarde.txt", ios::out | ios::trunc);   
                        fichier << nLife << " " << nTotal << " " << nAttaque << " " << nEnvi << " " << nVie << " " << nMobs << " " << nConstante2;           
                                       
                                    }


        et voici le .h:

        #ifndef combat_h  // si FICHIER_H n'est pas défini
        #define combat_h // on le défini


        //déclaration des librairies utilisées
        #include <allegro.h>
        #include <ctime>
        #include <fstream>


        int nFuck2=1;
        int fCombat(int nMobs);


        //Déclaration des fonctions
        int nMarais();
        int main();
        int nMontagne();
        int nDesert2();
        int nMarais2();
        int nForet2();
        int nMontagne2();
        int nBonus2();
        int nAbonus;
        int nbrpVie;


        ifstream fichier;

        #endif


        j'ai enlevé la déclaration de toutes les variables.

        Voici les erreurs:
        In file included from combat.cpp
        `ifstream' does not name a type
        In function `int fCombat(int)':
        `ofstream' undeclared (first use this function)
        (Each undeclared identifier is reported only once for each function it appears in.)
        expected `;' before "fichier"
        `fichier' undeclared (first use this function)
        `ios' has not been declared
        `out' undeclared (first use this function)
        `ios' has not been declared
        `trunc' undeclared (first use this function)

        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2006 à 16:41:20

          Met un #include fichier.h au début du fichier .cpp
          • Partager sur Facebook
          • Partager sur Twitter
            25 juin 2006 à 16:46:12

            Ca y est, j'ai rectifié combat_h en librairies_h, j'avais oublié, lol.
            c'est quoi le fichier.h?
            Si c'était la rectification, g tjrs le pb,

            merdi d'avoir répondu.


            @+ :soleil:
            • Partager sur Facebook
            • Partager sur Twitter
              26 juin 2006 à 15:43:24

              Je veux dire
              #include librairies_h.h
              ou
              #include librairies.h
              • Partager sur Facebook
              • Partager sur Twitter
                26 juin 2006 à 15:51:24

                std::ofstream non ? Un using namespace n'est pas commun à plusieurs unités de traduction...
                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2006 à 18:28:51

                  OUI! c'était ça, merci.
                  Maintenant, g un autre pb :'( :
                  multiple definition of " defendre"
                  first defined here.
                  Je comprends pas, pourtant, j'ais tous définis une seule fois dans mon librairies .h.

                  Vous savez ce que ça veut dire( pas la traduction, mais la résolution au pb :p )


                  Peut-être que le pb vient du fait que librairies.h comprends toutes les déclarations de mon prog, je sais pas trop.


                  @+ :soleil:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2006 à 20:19:14

                    Mets aussi un #ifdef dans e fichier .cpp
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 juin 2006 à 20:44:30

                      Tu peux pas mettre de variables globales dans un header, utilise extern si vraiment tu dois utiliser des globales (déconseillé !!!).
                      Cherche sur le forum, le sujet a déjà été évoqué et résolu pas mal de fois, à la longue ça devient lourd pour nous.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juin 2006 à 20:48:20

                        nan, ça le fait pas, g tjrs mes variables qui st "multiples" :(

                        je vais chercher, mais là..............

                        @+
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juillet 2006 à 21:49:49

                          J'ai profité des exos sur les tableaux de m@teo pour simplifier mon pb à un tout petit bout de code.

                          #include <cstdlib>
                          #include <iostream>
                          #include "tableau.h"

                          using namespace std;

                          int main(int argc, char *argv[])
                          {
                             
                              long tableau[4];
                             
                              printf("Entre 4 chifres que tu veux additionner\n");
                              printf("I : ");
                              scanf("%ld",&tableau[0]);
                              printf("II : ");
                              scanf("%ld", &tableau[1]);
                              printf("III : ");
                              scanf("%ld", &tableau[2]);
                              printf("IV : ");
                              scanf("%ld", &tableau[3]);
                             
                              printf("La somme est égale à : %ld \n\n", sommeTableau(tableau, 4));
                             
                             
                              system("PAUSE");
                              return EXIT_SUCCESS;
                          }


                          tableau.c:

                          #include <cstdlib>
                          #include <iostream>


                          long sommeTableau(long tableau[], long tailleTableau)
                          {
                               long somme = 0;
                               long i;
                               for( i = 0; i < 4 ; i++)
                               {
                                    printf("%ld\n\n",tableau[i]);
                                    somme = somme + tableau[i];
                                    }
                                    return somme;
                               
                               }


                          tableau.h:

                          long sommeTableau(long tableau[], long tailleTableau);


                          Ca, ça marche :soleil::p


                          Maintenant, si je veux remplacer, ds mon main:

                          printf("La somme est égale à : %ld \n\n", sommeTableau(tableau, 4));


                          Par:

                          printf("La somme est égale à : %ld \n\n", somme);


                          C'est là que je bloque, car ma fonction est utilisé par deux fichiers. je viens de voir les pointeurs, mais je ne vois pas comment m'en servir.

                          J'espère que j'ais été plus clair qu'avant ^^



                          @+ :soleil:
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juillet 2006 à 22:14:47

                            donas ton main il faut que tu rajoute une variable somme et que tu fasse appele a ta fonction car la le programme de sais pas se qu'est somme dans ton main puisqu'elle n'est declarer que dans la fonctiondonc remplace ton compte de main par
                            #include <cstdlib>
                            #include <iostream>
                            #include "tableau.h"

                            using namespace std;

                            int main(int argc, char *argv[])
                            {
                               
                                long tableau[4];
                                int somme = sommeTableau(tableau, 4)
                               
                                printf("Entre 4 chifres que tu veux additionner\n");
                                printf("I : ");
                                scanf("%ld",&tableau[0]);
                                printf("II : ");
                                scanf("%ld", &tableau[1]);
                                printf("III : ");
                                scanf("%ld", &tableau[2]);
                                printf("IV : ");
                                scanf("%ld", &tableau[3]);
                               
                                printf("La somme est égale à : %ld \n\n", somme);
                               
                               
                                system("PAUSE");
                                return EXIT_SUCCESS;
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 juillet 2006 à 22:47:58

                              Citation : r1pp3r

                              using namespace std;


                              Gné ? o_O C'est pas du C ça mon pote...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 juillet 2006 à 14:23:16

                                Et oui, ça semble marcher, en plus, c'est tout con comme solution. :p

                                Je vous direz si g réussi à le mettre ds mon jeu


                                @+ :soleil:
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 juillet 2006 à 15:19:25

                                  Citation : r1pp3r

                                  #include <cstdlib>
                                  #include <iostream>

                                  using namespace std;


                                  tu fait du C ou du C++ parce que la, il ne me semble pas que tu définissent printf et scanf que tu utilise par la suite.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 juillet 2006 à 15:57:33

                                    Si tu utilise ces lib alors cout<< et cin>> sinon tu fait du C et tu compile en C.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 juillet 2006 à 17:56:20

                                      je fais du C, c juste que g utilisé le même principe, j'ai pas copié le code.
                                      J'ai utilisé stdio.h et stdlib.h


                                      @+ :soleil:
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 juillet 2006 à 19:16:52

                                        En fait, ça marche pas, j'ai essayé de l'appliquer ds d'autres prog, et la variable ne garde pas la valeur à moins de la retourner directement.

                                        Je me débrouille pr que ça marche en fait, :euh::-°:p



                                        @+ :soleil:
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        diviser son code

                                        × 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