Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'inclusion

directives de compilation

    16 juin 2007 à 11:19:15

    Bonjour à tous et tout d’abord, bravo pour ce site qui répond vraiment aux attentes de tous les novices en leur expliquant progressivement et en français les bases à acquérir avant d’espérer aller plus loin. Merci bien sur à M@téo, le créateur et aussi aux modérateurs et à tous ceux qui par leur dynamisme contribuent à l’animation de ce site.

    Je vous explique maintenant le problème d’inclusion sur lequel je sèche avec d'abord un peu de code.

    //---------------------------------------------------------------------------
    // Unit1.h
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <Mask.hpp>
    #include <ScktComp.hpp>
    #include <StdCtrls.hpp>
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ScktComp.hpp>
    #include <Mask.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    #include "Fichier.h"
    #include "Aiguille.h"
    #include "Zone.h"
    #include "Itineraire.h"

    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
        TGroupBox *GroupBoxJournal;
        TMemo *MemoJournal;
        TClientSocket *ClientSocketInterface;

        TGroupBox *GroupBoxCartes;
        TCheckBox *CheckBoxCanton;
        TCheckBox *CheckBoxManipulateur;
        TCheckBox *CheckBoxSignalo;
        TCheckBox *CheckBoxPupitre;
        TCheckBox *CheckBoxAiguilles;
        TCheckBox *CheckBoxShunt;
        TCheckBox *CheckBoxDetection;

        TGroupBox *GroupBoxDialogue;
        TComboBox *ComboBoxCartes;
        TMaskEdit *MaskEditDialogue;
        TButton *ButtonEnvoi;

        TRadioButton *RadioButtonCanton;
        TRadioButton *RadioButtonManipulateur;
        TRadioButton *RadioButtonSignalo;
        TRadioButton *RadioButtonPupitre;
        TRadioButton *RadioButtonAiguilles;
        TRadioButton *RadioButtonShunts;
        TRadioButton *RadioButtonDetection;

        TComboBox *ComboBoxIt;
        TServerSocket *ServerSocketItineraire;

        void __fastcall FormActivate(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

        void __fastcall ClientSocketInterfaceRead(TObject *Sender,
              TCustomWinSocket *Socket);
        void __fastcall ClientSocketInterfaceConnecting(TObject *Sender,
              TCustomWinSocket *Socket);
        void __fastcall ClientSocketInterfaceError(TObject *Sender,
              TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
              int &ErrorCode);
        void __fastcall ServerSocketItineraireClientRead(TObject *Sender,
              TCustomWinSocket *Socket);

        void __fastcall CheckBoxCartesClick(TObject *Sender);
        void __fastcall RadioButtonClick(TObject *Sender);
        void __fastcall ButtonEnvoiClick(TObject *Sender);
        void __fastcall ComboBoxItClick(TObject *Sender);

    private:        // User declarations
        TStringList *ComboCartesList[8];
        TStringList *ComboItiList;
        TRadioButton *RadioButton;


    public// User declarations
        Aiguille *aiguille;
        Zone *zone;
        Itineraire *itineraire;

        void __fastcall TForm1::ErreurSocket(TClientSocket *Socket, int &ErrorCode, AnsiString Texte);
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------

    #endif

    // Unit1.cpp
    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------

     . . . Toutes les méthodes de la classe



    // Fichier.h

    //---------------------------------------------------------------------------

    #ifndef FichierH
    #define FichierH
    //---------------------------------------------------------------------------

    #include <stdio.h>
    #include <vcl.h>
    //---------------------------------------------------------------------------

    struct ligne
    {
        AnsiString texte;
        int nombreChamp;
        int *debutChamp;
        int *longueurChamp;
    };
    //---------------------------------------------------------------------------

    class Fichier //: EventArgs
    {
        public:

        __fastcall Fichier(); // constructeur
        __fastcall Fichier(char *nomFichier); // Constructeur surchargé
        __fastcall ~Fichier(); // destructeur

        int __fastcall getNombreLigne() const;
        AnsiString __fastcall getChamp(int numeroLigne, int numeroChamp);
        int __fastcall getChampNumerique(int numeroLigne, int numeroChamp);
        int __fastcall getNombreChamp(int numeroLigne);

        private:
        void __fastcall ouvrirFichier();
        void __fastcall fermerFichier();
        void __fastcall lireLigne();
        void __fastcall compterLigne();

        FILE *m_fichier;
        char *m_nomFichier;

        int m_nombreLigne;
        struct ligne *ms_ligne;
    };
    //---------------------------------------------------------------------------

    #endif

    // Fichier.cpp
    //---------------------------------------------------------------------------

    #pragma hdrstop

    #include "Fichier.h"

    //---------------------------------------------------------------------------

    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    . . . Toutes les méthodes de la classe



    // Zone.h
    //---------------------------------------------------------------------------

    #ifndef ZoneH
    #define ZoneH

    #include "Fichier.h"
    #include "Itineraire.h"  <gras>// Avec cet include, ne compile plus</gras>
    #include <vcl.h>
    //---------------------------------------------------------------------------

    class Zone
    {
        public:
        __fastcall Zone();
        __fastcall ~Zone();
        void __fastcall initialisation(Fichier *data);

        // accesseur
        int __fastcall getNumero();
        AnsiString __fastcall getNom();
        int __fastcall getEnregistrementItineraire();
        int __fastcall getOccupation();

        void __fastcall putEnregistrement(int numeroItineraire);

        private:
        int m_numero;
        AnsiString m_nom;
        //Itineraire *m_enregistrement;
        int m_enregistrementItineraire;
        bool m_occupation;
    };
    //---------------------------------------------------------------------------

    #endif

    // Zone.cpp
    //---------------------------------------------------------------------------

    #pragma hdrstop

    #include "Zone.h"
    #include "Unit1.h"

    //---------------------------------------------------------------------------

    #pragma package(smart_init)

    enum{NUMERO, NOM};
    //---------------------------------------------------------------------------
    . . . Toutes les méthodes de la classe



    // Aiguille.h
    //---------------------------------------------------------------------------

    #ifndef AiguilleH
    #define AiguilleH

    #include "Fichier.h"
    #include "Zone.h"
    #include <vcl.h>
    //---------------------------------------------------------------------------

    class Aiguille
    {
        public:
        __fastcall Aiguille();
        __fastcall ~Aiguille();
        void __fastcall initialisation(Fichier *data, Zone *zone);

        // accesseur
        int __fastcall getNumero();
        AnsiString __fastcall getNom();
        int __fastcall getCarte();
        int __fastcall getMoteur();
        int __fastcall getPosition();    // 01 -> à Droite, 10 -> à Gauche, 00 -> Décontrôle

        void __fastcall commande(int position);
        void __fastcall setControleGauche(bool kGauche);
        void __fastcall setControleDroite(bool kDroite);
        Aiguille * __fastcall majControle(int carte, int moteur, int position);

        private:
        int m_numero;
        AnsiString m_nom;
        int m_carte;
        int m_moteur;
        bool m_kGauche;
        bool m_kDroite;
        Zone *m_zone;
    };
    //---------------------------------------------------------------------------

    #endif

    // Aiguille.cpp
    //---------------------------------------------------------------------------

    #pragma hdrstop

    #include "Aiguille.h"
    #include "Unit1.h"

    //---------------------------------------------------------------------------

    #pragma package(smart_init)

    enum{NUMERO, NOM, CARTE, MOTEUR, ZONE};
    enum{DECONTROLE, DROITE, GAUCHE};
    //---------------------------------------------------------------------------
    . . . Toutes les méthodes de la classe



    // Itineraire.h
    //---------------------------------------------------------------------------

    #ifndef ItineraireH
    #define ItineraireH

    #include "Fichier.h"
    #include "Aiguille.h"
    #include "Zone.h"
    #include <vcl.h>
    //---------------------------------------------------------------------------

    class Itineraire
    {
        public:
        __fastcall Itineraire();
        __fastcall ~Itineraire();
        void __fastcall initialisation(Fichier *data, Aiguille *aiguille, Zone *zone);

        // accesseur
        int __fastcall getNumero();
        AnsiString __fastcall getNom();
        int __fastcall getNombreAiguille();
        int __fastcall getNombreZone();
        Aiguille* __fastcall getAdresseAiguille(int numeroAiguille, Aiguille *aiguille);
        Zone* __fastcall getAdresseZone( int numeroZone, Zone *zone);

        void __fastcall commandeItineraire();

        private:
        int m_numero;
        AnsiString m_nom;
        int m_nombreAiguille;
        int m_nombreZone;

        Aiguille *m_aiguille;
        int *m_positionAiguille;
        Zone *m_zone;

    };
    //---------------------------------------------------------------------------

    #endif

    // Itineraire.cpp
    //---------------------------------------------------------------------------

    #pragma hdrstop

    #include "Itineraire.h"
    #include "Unit1.h"

    //---------------------------------------------------------------------------

    #pragma package(smart_init)

    enum {NUMERO, NOM};
    //---------------------------------------------------------------------------
    . . . Toutes les méthodes de la classe


    Voilà maintenant ce qu’il se passe, tout compile et s’exécute normalement jusqu’à ce que dans Zone.h, j’ajoute le #define « Itineraire.h » pour pouvoir déclarer le pointeur Itineraire *m_enregistrement.

    J’ai alors des erreurs dans Itineraire.h sur la déclaration des prototypes de fonction ayant en paramètre Aiguille *aiguille et Zone *zone.

    Pour chacune d’entre elle, voici les messages d’erreur :

    Citation : Message d'erreur

    Type name expected
    Multiple declaration of ‘Itineraire ::Aiguille’ ou ‘Itineraire ::Zone’
    Earlier declaration of ‘Itineraire ::Aiguille’ ou ‘Itineraire ::Zone’


    Et une dernière erreur dans Unit1.cpp

    Citation : Message d'erreur

    ‘initialisation’ is not a member of ‘Itineraire’


    PS : J’utilise C++ Builder 6 de Borland
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2007 à 15:34:19

      J'ai pas compris ce qui compile ou non.

      Quel #define ?
      Le code que tu as donné compile ?
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2007 à 15:42:33

        Il compile si dans Zone.h, je mets en commentaire #include "Itineraire.h"

        Les erreurs apparaissent alors dans Itineraire.h ou les classes Aiguille et Zone ne sont plus reconnues.
        • Partager sur Facebook
        • Partager sur Twitter

        Problème d'inclusion

        × 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