Jeśli próbujesz udostępnić definicję struktury wśród kilku jednostek kompilacji (plików cpp), najczęściej stosowaną metodą jest: Umieść definicję swojej struktury w pliku nagłówkowym (mystruct.h). Jeśli struktura zawiera dowolne metody (tzn. Jest to raczej klasa z domyślnie publicznymi elementami członkowskimi), możesz zaimplementować je w pliku mystruct.CPP lub, jeśli są one lekkie, bezpośrednio w strukturze (co powoduje, że są one domyślnie inline).
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() { ... }
można używać struct w jak wielu plików cpp, jak chcesz, po prostu #include
mystruct.h:
głównym .cpp
#include "mystruct.h"
int main()
{
MyStruct myStruct;
myStruct.x = 1;
myStruct.f2();
// etc...
}
Jeśli, z drugiej strony, staramy się dzielić globalny instancji struct w kilku jednostkach kompilacji (nie jest całkowicie jasne, z pytaniem), zrób jak powyżej, ale również dodać
extern MyStruct globalStruct;
do mystruct .h. To ogłosi, że instancja jest dostępna z zewnętrznym powiązaniem; innymi słowy, że zmienna istnieje, ale jest inicjowana gdzie indziej (w twoim przypadku w mystruct.cpp). Dodaj inicjalizację instancji globalnej do mystruct.cpp:
MyStruct globalStruct;
Jest to ważne. Bez ręcznego utworzenia instancji globalStruct
pojawią się błędy linkera unresolved-external. Teraz masz dostęp do globalStruct
z każdej jednostki kompilacji zawierającej plik mystruct.h.
powinieneś dodać kod, aby uzyskać bardziej szczegółowe odpowiedzi na swoje pytanie. – Matthieu