/Anonimizzato5649Utente anonimizzato10 feb 2014, 21:04Ciao 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.
/Anonimizzato5649Utente anonimizzato11 feb 2014, 00:22Ciao 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.
OoregonSuper FamosoIscritto danov, 2011Messaggi2191711 feb 2014, 01:07Questa 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;
/Anonimizzato5649Utente anonimizzato11 feb 2014, 09:36Ciao 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.
OoregonSuper FamosoIscritto danov, 2011Messaggi2191711 feb 2014, 10:24Il 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