Maledetto Header file...

di il
6 risposte

Maledetto Header file...

Ciao a tutti.
Ho questo problema:
Ho un sorgente main, più due .cpp e un header dove ho dichiarato classi e funzioni.
Però quando compilo, mi dà sempre errore di classe già definita o nel main o in uno dei due .cpp.
anche se ho inserito nell’header le direttive #ifndef HEADER_ e #define HEADER_ e #endif.
Dove sbaglio?
Grazie.

6 Risposte

  • Re: Maledetto Header file...

    Da qualche parte sbagli ...
  • Re: Maledetto Header file...

    Posta l'header
  • Re: Maledetto Header file...

    Ciao Ale.
    Questo è l'header:
    /*::::::::::::::::::: HEADER TURNO v2 ::::::::::::::::::::::*/
    
    #ifndef HEADER_Turno
    #define HEADER_Turno
    
    #include <iostream> 
    #include <string> 
    
    using namespace std;
    
    class data
    {
        public:
           //costruttore
           data(int =0,int = 0,int = 0);
           void InserisciData();
           void VisualizzaData();
           void StampaMese();
            
        private:
          int giorno;
          int mese;
          int anno;    
    };
      class SQUADRA
    	{	public:
    		string Quad[10];// Elem doppi perchè nome e cognome
    		string Patt[10];
    		string Tagl[14];
    		string Mecc[4];
    		string Elstrum[4];
        } SqA, SqB, SqC, SqD, SqE, SqF, SqG, SqH, SqI; 
    
                                     void VisualizzaComponentiSquadraA();
    		void VisualizzaComponentiSquadraB();
    		void VisualizzaComponentiSquadraC();
    		void VisualizzaComponentiSquadraD();
    		void VisualizzaComponentiSquadraE();
    		void VisualizzaComponentiSquadraF();
    		void VisualizzaComponentiSquadraG();
    		void VisualizzaComponentiSquadraH();
    		void VisualizzaComponentiSquadraI();
    		void CercaComponenteSquadra();
    
    I messaggi di errore che ottengo sono questi:( ne metto solo qualche riga ma valgono per tutte le funzioni chiamanti dal main):
    1>VISUALIZZA COMPONENTI SQUADRA.obj : error LNK2005: "class SQUADRA SqD" (?     SqD@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj
    1>VISUALIZZA COMPONENTI SQUADRA.obj : error LNK2005: "class SQUADRA SqI" (?SqI@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj
    1>VISUALIZZA COMPONENTI SQUADRA.obj : error LNK2005: "class SQUADRA SqH" (?SqH@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj....
    
    1>CERCA COMPONENTE SQUADRA.obj : error LNK2005: "class SQUADRA SqB" (?SqB@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj
    1>CERCA COMPONENTE SQUADRA.obj : error LNK2005: "class SQUADRA SqG" (?SqG@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj
    1>CERCA COMPONENTE SQUADRA.obj : error LNK2005: "class SQUADRA SqA" (?SqA@@3VSQUADRA@@A) già definito in MAIN Turno subito v2.obj...ecc.ecc.
    
    Le funzioni VISUALIZZA COMPONENTI SQUADRA e CERCA COMPONENTE SQUADRA, sono tutte e due nel main.
  • Re: Maledetto Header file...

    Questa linea

    SQUADRA SqA, SqB, SqC, SqD, SqE, SqF, SqG, SqH, SqI;

    va nel main non nell'include.

    Nell'include ci va

    extern SQUADRA SqA, SqB, SqC, SqD, SqE, SqF, SqG, SqH, SqI;
  • Re: Maledetto Header file...

    Ciao Oregon.

    Ho capito perchè sei "Saggio".
    Adesso funziona . Davvero sei il re degli Cippippisti .
    Ora,solo se ne hai voglia, mi potresti spiegare perchè non andava?
    Io ho intuito che, includendo l'header, negli altri moduli, era come si venisse a creare
    una specie di loop, per cui la dichiarazione della clesse, veniva vista in maniera ridondante e da qui la segnalazione dell'errore. E' così?

    Grazie di nuovo e grazie anche ad Ale.
  • Re: Maledetto Header file...

    Il fatto è che nell'header (nei file .h in generale) non si definiscono variabili o si include codice eseguibile ma si inseriscono solamente dichiarazioni.

    Quelle variabili di classe che hai inserito vanno in un file .cpp, in uno solo. Gli altro moduli sapranno, tramite il file header e la extern, che le variabili esistono da qualche parte. Penserà il linker a trovarle.

    Le variabili non possono essere definite in due moduli.

    Vedi
    http://msdn.microsoft.com/it-it/library/9e2zdck2.asp
Devi accedere o registrarti per scrivere nel forum
6 risposte