PDA

View Full Version : [C++] Problema (probabilmente stupido) con inclusioni


willygroup
18-11-2008, 12:08
Ciao,
ho definito 2 strutture che vengono usate da quasi tutte le funzioni del mio programma.

Le ho inserite in un file es: struct.h
e poi le devo usare in alcuni file .h che contengono altre funzioni.
es: alpha.h, beta.h

Ho inserito:
#include "mystruct.h"
sia in alpha.h che in beta.h

Ed ho inserito le seguenti direttive nel file struct.h:


#ifndef MYSTRUCT_H
#define MYSTRUCT_H
#pragma once
.
.
.
struct pippo{

int a;
int b;
}aliasPippo;
.
.

#endif


Però in compilazione ottengo dei code erroe LNK2005 e LNK1169 che mi dicono che le strutture sono state definite più volte.

Cosa sto sbagliando?

Tommo
18-11-2008, 12:41
Anche io ho avuto questo problema, ma non c'è stato verso di risolverlo :doh:

Stai già facendo le uniche due cose che risolverebbero in un caso normale, cioè ifdef e pragma once... cosa che ho provato a fare anche io, ma senza risultati.

Dovresti provare a mettere la struct in un namespace, o sennò statica in una classe, dovrebbe aiutare.
Cmq credo che il linker di C++ sbarelli abbastanza in progetti complessi, spesso bisogna stare attenti oppure demolisce tutto...

Spero cmq che qualcuno più esperto sappia come rimediare :D

cionci
18-11-2008, 18:48
No, qui il problema è diverso. Hai dichiarato la variabile aliasPippo nel .h e questo non va assolutamente bene. Quando il compilatore va a linkare i file oggetto di due sorgenti che includono quella struttura ovviamente la variabile aliasPippo è dichiara due volte ;)

willygroup
18-11-2008, 19:47
No, qui il problema è diverso. Hai dichiarato la variabile aliasPippo nel .h e questo non va assolutamente bene. Quando il compilatore va a linkare i file oggetto di due sorgenti che includono quella struttura ovviamente la variabile aliasPippo è dichiara due volte ;)


Ecco! Adesso funziona! :D

Avevo capito che "aliasPippo" fosse un'alias del nome della struttura (a cosa sarebbe servito poi?), invece è la dichiarazione di una variabile di tipo Pippo che si chiama aliasPippo. :doh:

Grazie mille!
Ero ad un punto morto! :muro:

cionci
18-11-2008, 19:49
L'alias si fa con typedef:

typedef struct pippo{
int a;
int b;
} aliasPippo;