2010-07-16 15 views
11

I extern bin mit Variablen von einer anderen Klasse zu holen, und es funktioniert für int ist in Ordnung, Float etc ...Externes Struct?

Aber das funktioniert nicht, und ich weiß nicht, wie es zu tun:

Class1.cpp

struct MyStruct { 
int x; 
} 

MyStruct theVar; 

Class2.cpp

extern MyStruct theVar; 

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

Es funktioniert nicht, da Class2 nicht weiß, was MyStruct ist.

Wie behebe ich das? :/

Ich versuchte, die gleiche Struktur in Class2.cpp zu deklarieren, und es kompiliert, aber die Werte waren falsch.

Antwort

17

Sie geben die Deklaration struct MyStruct in eine .h-Datei ein und fügen sie in class1.cpp und class2.cpp ein.

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

Danke, funktioniert jetzt gut :) –

+0

Sollte die Definition für die Struktur auch in der Kopfzeile sein? Oder kann die Definition in die Quelle .cpp aufgeteilt werden? – cjcurrie

+0

Danke, dass es geholfen hat – achoora

0

Sie müssen zuerst Ihre Struktur in einer Klasse definieren oder gemeinsame Header-Datei. Stellen Sie sicher, dass Sie diese initiale Definition beispielsweise mit #include "Class1.h" angeben.

Dann müssen Sie Ihre Aussage ändern, um zu sagen extern struct MyStruct theVar;

Diese Anweisung nicht in einer Header-Datei sein muss. Es kann global sein.

Bearbeiten: Einige .CPP-Datei muss die ursprüngliche Deklaration enthalten. Alle extern sagt dem Compiler/Linker, Ihnen zu vertrauen, dass es woanders existiert und wenn das Programm erstellt wird, wird es die gültige Definition finden. Wenn Sie struct MyStruct theVar nicht irgendwo definieren, kompiliert es wahrscheinlich nicht den ganzen Weg, wenn es den Linker erreicht.

+2

Dies reicht aus, um dem Compiler mitzuteilen, dass 'MyStruct' existiert, aber es wird fehlschlagen, sobald Sie versuchen, auf Mitglieder zuzugreifen. –