Вопрос о плагине читателя, определенном в примере с бинпэкингом. Я нашел следующее объявление в методе интерфейса (файл reader_bpa.c),
SCIP_READERDATA* readerdata;
readerdata = NULL;
Я знаю, что SCIP_READERDATA определен в файле type_reader.h:
typedef struct SCIP_ReaderData SCIP_READERDATA;
Тем не менее, структура SCIP_ReaderData не определена в считывателе binpacking, так что это фактическая структура, что «SCIP_READERDATA * readerdata;» ссылка на? что это за указатель
PS: я заметил, что стандартные читатели в SCIP имеют аналогичное использование.
Это больше вопрос C, чем вопрос SCIP, если я не ошибаюсь. Интерфейсные функции SCIPincludeReader () и SCIPincludeReaderBasic () требуют указатель на данные считывателя в качестве последнего аргумента. Предполагается, что данные читателя позволяют автору плагина соединять произвольные данные со своим плагином читателя, объявляя соответствующий struct SCIP_ReaderData
как и многие другие плагины.
Если вы попытаетесь что-то сделать с указателем, например, выделите для него память, используя SCIPallocMemory(scip, &readerdata)
, вы получите ошибки компилятора, потому что указатель ссылается на неполный тип, а именно struct SCIP_ReaderData
,
Более полезная информация о неполных типах найдена, например, Вот
Дело в том, что пример использует это, чтобы прояснить, какие аргументы передаются SCIPIncludeReaderBasic()
-функция, где вы бы увидели NULL
иначе.
Других решений пока нет …