Association de classes en C++

chmanu Messages postés 166 Statut Membre -  
 chmanu -
Salut tous,
J ai un programme issu d'un shéma UML, et j ai deux classe par exemple Propriete et Joueur et je voudrais associer ces deux classes :
un Joueur possede des proprietes et une Propriete appartient à un joueur.
j ai donc lier les deux class par des pointeurs.
Seulement, mon compilateur ne veut pas car ds joueur.h j ai fais un #include "propriete.h" et ds propriete.h j ai fait #include "joueur.h". J etais pourtant sur que ca pouvait marcher qd meme!
Est ce de la faute du compilateur?
comment faire pour garder deux fichier separés?

1 réponse

  1. chmanu Messages postés 166 Statut Membre 28
     
    Bien je pense que je pourrai m'en tirai avec ca :

    http://groups.google.com/groups?q=multiple+%23include&hl=fr&selm=1989Nov6.172747.9547%40paris.ics.uci.edu&rnum=2

    c'est tres bien expliquer bien que ce soit en anglais.
    (j aime bien mettre les solutions de mes pb car si jamais qq un (ou moi) en a besoin un jour, il a ka rech ds le forum.

    Tiens j en profite pour demander au webmaster si ce serait pas possible d avoir une recherche avec plusieurs mots clés?

    chmanu
    0
    1. weblook
       
      Il ya également une autre solution possible qui consite à inclure les .h (ou au moins un dans ton cas) dans le .cpp et non dans le .h
      mais en indiquant au compilateur l'existence de cette classe, en utilisant la syntaxe:

      class NomDeTaClasse

      Attention cela ne marche que pour des références (pointeurs),pour les aggrégatoins utliser la méthode #define...

      Exemple:

      class CJoueur

      class propriete
      {
      CJoueur *joueur;
      ......
      }

      et dans propriete.cpp -> #include "propriete.h"
      0
      1. chmanu > weblook
         
        ok merci, ce que j ai fait reviens au meme,
        mais j ai qd meme une (meme deux) questions :
        est ce preferable de definir une classe joueur (typedef class Joueur Joueur;)
        ou de lui indiquer qu elle est definie ailleur (extern class Joueur Joueur;)
        je pencherait pour la deuxieme solution, mais le compilateur ne fait aucune difference.
        et sinon, comment je cree le Makefile?
        comme ca :
        main: main.o joueur.o propriete.o
        gcc -o main.o joueur.o propriete.o
        main.o: main.cpp joueur.h propriete.h
        ...
        joueur.o: joueur.cpp joueur.h propriete.h
        gcc -c joueur.cpp joueur.h propriete.h
        propriete.o: propriete.cpp propriete.h joueur.h
        gcc -c propriete.cpp propriete.h joueur.h

        Y aura pas conflit?
        j ai pas essaye, en fait j ai une dizaine de classes et j ai fait comme ca avec la dizaine et ca marche pas alors je voulais savoir si c le principe ou si c a l interieur de mes fichiers qu il y a un pb.

        Merci encore
        0