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 :

diviser son code


Sujet :

C++

  1. #1
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut diviser son code
    Salut, j'aimerais partionner le code de mon projet, qui atteint les 3000 lignes, en créant plusieurs .cpp.
    seulement, je n'y arrive pas.
    J'aimerais savoir ce qu'il faut faire si mes cariables sont utilisées dans plusieurs .cpp, et où les déclarer en générale?
    Ensuite, j'ai en ce moment un pb:

    multiple definition of "..."
    first defined here

    Je comprends pas où est le pb

    Ce que j'ai fais:

    J'ai créé un fichier librairies.h, avec toutes mes variables, tout les bitmaps,...
    Ensuite, j'ai créé mon fichier combat.cpp, enlévé de main.

    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
    #ifndef librairies_h  // si FICHIER_H n'est pas défini 
    #define librairies_h // on le défini 
     
     
    //déclaration des librairies utilisées
    #include <allegro.h>
    #include <ctime>
    #include <fstream>
     
    using namespace::std;
     
    //déclaration des librairies utilisées
    #include <allegro.h>
    #include <ctime>
    #include <fstream>
     
    using namespace::std;
    //Déclaration des image, en tant que bitmap
    BITMAP*fond;
    BITMAP*souris;
    ........
    int nBonus2();
    int nAbonus;
    int nbrpVie;
     
     
    #endif
     
     
     
     
    Le .cpp:
     
     
     
     
    #ifndef combat_cpp  // si FICHIER_H n'est pas défini 
    #define combat_cpp // on le défini 
     
     
     
     
    // on le défini 
    #include "librairies.h"
     
    using namespace::std;
     
     
     
    int fCombat (int nMobs) 
    {
     
       if ( nVie <= 0)
       {
     
     
                        }
    nJeu = 0;         
    }
     
     
    #endif
     
     
     
     
    MAIN:
     
    /*Monster Safari II
    jeu d'action basé sur le point&clic*/
     
     
     
    #include "librairies.h"
    #include "combat.cpp"
     
    using namespace std;
     
    //Déclaration des variables utilisées lors du programme
     
     
     
     
     
     
    int main()
    {
    ...................
    }

    Voilà, je bloque vraiment, j'ai régardé tout les tutos que j'ai vue, je n'ai rien trouvé, alors si vous avez une solution, je prends .


    Merci d'avance.



    @+

  2. #2
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    je crois qu'il y a des erreurs de copier/coller dans ton message, plusieurs includes identiques dans le .h par exemple. Et il n'est pas necessaire de faire le #ifdef #define dans le .cpp.

    puis avec le peu d'information que tu donnes on peut pas dire grand choses d'autre, les noms des variables qui pourraient eventuellement etre definies plusieurs fois par exemple.

    tu n'as pas besoin d'appeler using namespace std; autant de fois, une seul fois dans le .h suffit.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    tu n'as pas besoin d'appeler using namespace std; autant de fois, une seul fois dans le .h suffit.
    LE FOUET!!!
    Répète après moi (en rythme avec le fouet)
    On-ne-met-pas-de-u-sing-name-space-dans-un-point-h :
    U-ni-que-ment-dans-les-point-c-p-p.

  4. #4
    Membre éclairé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par xxiemeciel
    Salut,

    je crois qu'il y a des erreurs de copier/coller dans ton message, plusieurs includes identiques dans le .h par exemple.
    d'ou le'rreur peut-etre...

  5. #5
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Citation Envoyé par Médinoc
    LE FOUET!!!
    Répète après moi (en rythme avec le fouet)
    On-ne-met-pas-de-u-sing-name-space-dans-un-point-h :
    U-ni-que-ment-dans-les-point-c-p-p.
    ahah oui j'avoue c'est tres vrai, mais rien n'empeche de le mettre dans le header file si tu es sure que tu n'auras pas de conflit avec tes noms.

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Normalement, d'après Astérix chez les Helvètes, le fouet , c'est ce qui vient après le bâton, et donc dans ton cas il ne reste que la dernière étape :

    Dans le lac avec une pierre aux pieds !!


    Le problème n'est pas tant que tu sais ce que tu fais avec tes propres conflits de nom. Pour ça, tu est assez grand pour faire comme tu souhaites dans tes .cpp.

    Le problème, c'est qu'en faisant ça, tu impose des choses, à savoir que aucun des utilisateurs de tes .h n'aura de conflit, y compris ceux que tu n'as jamais rencontrés (comme par exemple toi dans 1 semaine).

    Et là, c'est présomptueux.

  7. #7
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Je sais lol vous prechez un convaincu, ca m'apprendra a etre trop feignant pour ecrire mes posts

  8. #8
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    Je suis pas sûr d'avoir vraiment compris le principe, vous auriez pas un exemple, svp, parce que là, ça fait plusieurs jours que j'avance pas
    et ça m'enerve



    @+

  9. #9
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    J'ai eéssayé d'en faire un bpc plus simple, et g tjrs la même erreur:

    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
     
    MAIN:
     
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include "libr.h"
     
     
     
    int main ()
    {
        fNombre();
     
        cout << nRectangle;
     
        system("pause");
        return 0;
     
    }
     
     
     
    Le .cpp:
     
    #include "libr.h"
     
    int fNombre ()
    {
           nRectangle = nLongeur*nLargeur;
           }
     
     
    le .h:
     
     
    using namespace::std;
     
    int fNombre();
     
    int nLongeur;
    int nLargeur;
    int nRectangle;
    Le compilateur me met:

    multiple définition of "nRectangle
    first defined here

    Ca voudrait dire que cet erreur est retourné quand une variable est utilisée dans plusieur fichiers.
    Comment faire pour ne plus avoir cette erreur?
    (Au moins, j'ai trouvé l pb, lol)


    @+

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Fais une recherche dans la FAQ C à "variable globale".

  11. #11
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    J'ai essayé de le faire, j'ai créé un fichier globale.cpp, avec les declarations de mes variables, et g rajouté extern, devant la déclaration de toutes mes variables ds mon .h, j'ai tjrs mon pb, vc en plus, un pb vc globale.o .
    Je n'y comprends rien, pourtant, j'en ais fais des tutos, mais non...............



    @+

  12. #12
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    tu as une definition multiple a cause du include dans ton main et du include dans ton cpp parceque tu declares tes variables dans ton .h

    chaque fois que tu fais un include c'est comme si le code du .h se copiait a la place du include. Donc ton nRectangle existe a la fois dans le main et dans le cpp.

    utilise static ou bien fais un code bien plus propre, on ne declare pas de variable comme ca dans un header file. Suis le conseil precedent et va lire de la documentation sur les variables globales.

  13. #13
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    oui, d'accord, mais si je définis mes variables dans chacun de mes fichiers .cpp, j'aurais un pb de redéfinition de mes variables, et jke ne peux pas mettre stactic, parce que c la même variable, et qu'elle doit être prise en compte ds tout mes fichiers.

    Ou alors, j'ai pas compris, ça m'étonnerait pas, lol



    @+

  14. #14
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Il ne faut pas que tu redéfinisses tes variables dans chacun des fichiers cpp, mais que tu les déclares.

    Pour ça, tu dois les faire précéder par extern.

    Le fichier cpp dans lequel ta variable est définie :
    Et dans les autres fichiers cpp qui l'utilisent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern MonType MaVariable;

  15. #15
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    utiliser extern pourrait effectivement etre une solution. Mais je comprend pas tres bien pourquoi tu veux tant que ca declarer tes variables de cette facon, il y a beaucoup de moyen bien plus propre de faire ce que tu veux faire a mon avis, comme utiliser un singleton qui contient tes variables par exemple (ceci dit je connais pas ton application donc c'est a toi de juger)

  16. #16
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par lord anubis
    Salut, j'aimerais partionner le code de mon projet, qui atteint les 3000 lignes, en créant plusieurs .cpp.
    seulement, je n'y arrive pas.
    J'espère que ce n'est pas un projet professionel car cela montre une lacune énorme d'analyse....

  17. #17
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    Bah, en fait j'arrive pas à faire autrement, et avec les extern, g tjrs le pb de multiplicité.

    pour mon code, c'est pas u projet pro, j'ai commencé à programmer il y a 6 mois à peu prés, et j'ai pas fait des miracles, j'ais dû un peu bossé à cause de la terminale, donc pas fait des miracles en prog.
    En fait, j'ais fait bcp de bricolga,e et là, j'essaie d'ameliorer ma technique, j'ai déjà réussi à passer de 10000 à 3000 lignes de code, donc ça avance, mais là,je bloque.



    @+

  18. #18
    Membre averti Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Points : 352
    Points
    352
    Par défaut
    Salut,

    en fais ce qui t'arrives c'est que tu as mené ton project exactement comme il ne fallait pas le faire et tu te retrouves typiquement dans la configuration de quelqu'un qui a commencé a coder sans faire de design et qui ensuite ne sais plus comment remettre son code a jours proprement.

    Pour tes futurs developpement prevois ta phase de design avant la phase de codage. Je te conseil aussi de lire de la documentation sur les designs pattern et les diagrammes UML, diagrammes de classes. Cela te permettra d'avoir beaucoup de moins de pb au codage et surtout de faire du code plus reutilisable et plus stable (ainsi que plus facile a debugger lol)

    Pour ton probleme actuel il faudrait probablement avoir une vue d'ensemble plus importante de ton projet. Si tu as codé tout ton projet de la meme maniere que les quelques lignes que tu nous a montrés je pense que tu risque de ne pas trouver la solution tout de suite (mais j'Espere pour toi que je me trompe)

  19. #19
    Membre du Club Avatar de lord anubis
    Inscrit en
    Février 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Février 2006
    Messages : 114
    Points : 59
    Points
    59
    Par défaut
    en fait, pour résumer mon codage, j'ai essayé de faire un maximum de fonction, pour rendre justement plus facile le debug.
    Je vais finir la prochaine version, l'expliquer, et puis compartimenter le code.
    Comme ça, j'aurais plus que ça à faire pdt un bout de tps, juste vt la prepa( si g mon bac )



    PS: le jeu se trouve ds ma signature




    @+

Discussions similaires

  1. Comment bien déboguer son code ?
    Par D[r]eadLock dans le forum Débuter
    Réponses: 47
    Dernier message: 02/04/2024, 16h06
  2. Diviser son code en plusieurs fichiers ?
    Par tintin72 dans le forum jQuery
    Réponses: 4
    Dernier message: 13/09/2013, 16h02
  3. Passer son code du C en C++
    Par Mynautor dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/02/2005, 03h14
  4. Propriété de son code source.
    Par chocobn49 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 06/07/2004, 14h40
  5. [mise en page] pour bien indenter son code
    Par bihorece dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/08/2003, 16h14

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