2010-07-16 14 views
11

estoy usando extern a buscar las variables de otra clase, y funciona muy bien para la int, float, etc ... deExtern Struct?

Pero esto no funciona, y no sé cómo hacerlo:

Class1.cpp

struct MyStruct { 
int x; 
} 

MyStruct theVar; 

Class2.cpp

extern MyStruct theVar; 

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

no funciona porque Clase2 no sabe lo que es MyStruct.

¿cómo puedo solucionar esto? :/

Intenté declarar la misma estructura en Class2.cpp, y se compiló, pero los valores eran incorrectos.

Respuesta

17

Pone la declaración de tipo struct MyStruct en un archivo .h y lo incluye en class1.cpp y class2.cpp.

OIA:

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

Gracias, funciona bien ahora :) –

+0

¿Debería la definición para la estructura también estar en el encabezado? ¿O la definición puede dividirse en la fuente .cpp? – cjcurrie

+0

Gracias ayudó – achoora

0

Es necesario definir primero su estructura en una clase o archivo de encabezado común. Asegúrese de incluir esta definición inicial por medio de #include "Class1.h", por ejemplo.

Entonces, es necesario modificar su declaración para decir extern struct MyStruct theVar;

Esta declaración no tiene por qué estar en un archivo de cabecera. Puede ser global.

Editar: Algunos archivos .CPP deben contener la declaración original. Todo lo que hace el extern es decirle al compilador/vinculador que confíe en usted que existe en otro lugar y que cuando se construya el programa, encontrará la definición válida. Si no define struct MyStruct theVar en algún lugar, es probable que no compile todo el camino de todos modos cuando llegue al enlazador.

+2

Esto es suficiente para decirle al compilador que 'MyStruct' existe, pero fallará tan pronto como intente acceder a los miembros. –