Если вы пытаетесь разделить определение структуры среди нескольких модулей компиляции (файлы cpp), общий способ таков: Поместите определение вашей структуры в файл заголовка (mystruct.h) , Если структура содержит какие-либо методы (т.е. это по умолчанию класс со всеми открытыми членами), вы можете реализовать их в файле mystruct.CPP или, если они легковесны, непосредственно в структуре (что делает их встроенный по умолчанию).
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() { ... }
Вы можете использовать свою структуру в любом количестве файлов cpp, просто #include
mystruct.h:
main.cpp
#include "mystruct.h"
int main()
{
MyStruct myStruct;
myStruct.x = 1;
myStruct.f2();
// etc...
}
Если, с другой стороны, вы пытаетесь разделить глобальный экземпляр структуры на несколько модулей компиляции (это не совсем понятно из вашего вопроса), сделайте, как указано выше, но также добавьте
extern MyStruct globalStruct;
на mystruct.h. Это объявит, что экземпляр доступен с внешней связью; другими словами, переменная существует, но инициализируется в другом месте (в вашем случае в mystruct.cpp). Добавьте инициализацию глобального экземпляра в mystruct.cpp:
MyStruct globalStruct;
Это важно. Без создания экземпляра globalStruct
вручную вы получите unresolved-external ошибок компоновщика. Теперь у вас есть доступ к globalStruct
из каждого модуля компиляции, включая mystruct.h.