Si usted está tratando de compartir la definición de una estructura entre varias unidades de compilación (archivos CPP), la forma común es la siguiente: Coloque la definición de su estructura en un archivo de cabecera (mystruct.h). Si la estructura contiene algún método (es decir, es una clase con todos los miembros públicos por defecto), puede implementarlos en el archivo mystruct.CPP o, si son livianos, directamente dentro de la estructura (lo que los hace inline por defecto)
mystruct.h:
#ifndef MYSTRUCT_H
#define MYSTRUCT_H
struct MyStruct
{
int x;
void f1() { /* Implementation here. */ }
void f2(); /* Implemented in mystruct.cpp */
};
#endif
mystruct.cpp
#include "mystruct.h"
// Implementation of f2() goes here
void MyStruct::f2() { ... }
Puede utilizar su estructura en tantos archivos cpp como desee, simplemente #include
mystruct.h:
principal .cpp
#include "mystruct.h"
int main()
{
MyStruct myStruct;
myStruct.x = 1;
myStruct.f2();
// etc...
}
Si, por el contrario, que está tratando de compartir un mundial ejemplo de la estructura a través de varias unidades de compilación (que no es absolutamente claro por su pregunta), hacer que el anterior pero también se suman
extern MyStruct globalStruct;
a myStruct .h. Esto anunciará que una instancia está disponible con enlace externo; en otras palabras, existe una variable pero se inicializa en otro lugar (en tu caso en mystruct.cpp). Agregue la inicialización de la instancia global a mystruct.cpp:
MyStruct globalStruct;
Esto es importante. Sin crear manualmente una instancia de globalStruct
, obtendría unresolved-external errores de vinculador. Ahora tiene acceso al globalStruct
desde cada unidad de compilación que incluye mystruct.h.
debe agregar un código para tener respuestas más específicas a su pregunta. – Matthieu