2010-07-16 32 views
11

Sto utilizzando extern per andare a prendere le variabili da un'altra classe, e tutto funziona bene per int di, di float ecc ...Extern Struct?

Ma questo non funziona, e non so come farlo:

Class1.cpp

struct MyStruct { 
int x; 
} 

MyStruct theVar; 

Class2.cpp

extern MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 

non funziona perché Class2 non sa cosa MyStruct è.

Come posso risolvere questo problema? :/

Ho provato a dichiarare la stessa struttura in Class2.cpp e ho compilato, ma i valori erano errati.

risposta

17

Si inserisce la dichiarazione di tipo struct MyStruct in un file .h e lo si include sia in class1.cpp che in class2.cpp.

IOW:

Myst.h

struct MyStruct { 
int x; 
}; 

Class1.cpp

#include "Myst.h" 

MyStruct theVar; 

Class2.cpp

#include "Myst.h" 

extern struct MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 
+0

Grazie, funziona bene ora :) –

+0

La definizione della struttura deve essere presente anche nell'intestazione? Oppure la definizione può essere scissa nella fonte .cpp? – cjcurrie

+0

Grazie ha aiutato – achoora

0

È necessario definire prima la vostra struct in una classe o file di intestazione comune. Ad esempio, assicurati di includere questa definizione iniziale per mezzo di #include "Class1.h".

Quindi, è necessario modificare la sua dichiarazione per dire extern struct MyStruct theVar;

Questa affermazione non ha bisogno di essere in un file di intestazione. Può essere globale.

Modifica: alcuni file .CPP devono contenere la dichiarazione originale. Tutto il extern dice al compilatore/linker di fidarsi che esiste da qualche altra parte e quando il programma è costruito, troverà la definizione valida. Se non si definisce struct MyStruct theVar da qualche parte, probabilmente non verrà compilato in ogni caso quando raggiunge il linker.

+2

Questo è sufficiente per dire al compilatore che 'MyStruct' esiste, ma fallirà non appena si tenta di accedere a qualsiasi membro. –