Переадресация C ++. Объявление структуры в файле .h и определение структуры в файле .cpp.

Я с нетерпением жду, чтобы объявить структуру в заголовке, а затем скрыть реализацию в исходном файле.

mystruct.h

...

struct MyStruct;

...

mystruct.cpp

#include <mystruct.h>
...

struct MyStruct : virtual SomeOtherStruct, virtual AndAnotherStruct {};

...

Однако, когда я пытаюсь создать экземпляр MyStruct:

main.cpp

#include <mystruct.h>
...

MyStruct structTest;

...

Я получаю ошибку

«ошибка: агрегат» MyStruct structTest «имеет неполный тип и не может
быть определенным

Как я могу объявить структуру в заголовке, а затем определить ее позже в источнике? Важно что MyStruct наследует от других структур. Я хотел бы скрыть как можно больше деталей реализации.

1

Решение

Вы можете использовать указатель на структуру. Однако вы не можете использовать значение типа MyStruct, потому что компилятор не знает размер / расположение структуры без определения структуры. Поскольку определение структуры скрыто в файле .cpp (и, следовательно, не «видно», когда компилятор обрабатывает main.cpp):

MyStruct* structTest;

разрешено в вашем main.cpp, тогда как

 MyStruct structTest;

не является. Дополнительно что-то вроде:

void foo() {
MyStruct* test;
test->someFunc();
}

не будет компилироваться, если он помещен в main.cpp по той же причине. Вы должны поместить определение структуры в заголовок или использовать PIMPL, как заметил один из других комментаторов.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector