У меня есть typedef для структуры в sampleHeader.h, которая похожа на:
typedef struct example Example;
и у меня есть в моем sampleSource.c:
struct example{
char a[4];
char b[4];
char c[5];
}
Теперь по какой-то причине, когда я возвращаю указатель обратно на свою основную функцию, которая ссылается на структуру, которая была создана (и malloc’d), и пытаюсь распечатать значения каждого члена, я получаю сообщение об ошибке в строках «не может быть разорвано неполное. тип»
Любые идеи?
Можем ли мы увидеть фрагмент кода, который на самом деле получает ошибку неполного типа невозможно разыменовать? — person andrew Patterson schedule 09.10.2013
Взгляните сюда: bbs.archlinux.org/viewtopic.php?id=141686</ а> — person andrew Patterson schedule 09.10.2013
Нам нужно увидеть код, но вам нужен ‘;’ в конце определения структуры. — person andrew Patterson schedule 09.10.2013
Код не нужен, это простая проблема с областью видимости. main.c не может видеть определение, потому что его нет в заголовке. — person andrew Patterson schedule 09.10.2013
В файле заголовка вы только передали объявленную структуру. Это нормально, и вы сможете объявлять указатели и ссылки на структуру в заголовке (и в любом другом заголовке или файле cpp, который также включает этот заголовок).
Поскольку компилятор видел только определение в модуле cpp, это единственное место, где вы сможете объявлять переменные типа struct example по значению или разыменовать указатели для доступа к членам. Вне файла cpp компилятор не знает, насколько велика структура и какие члены.
Если вам нужно использовать структуру в нескольких модулях, объявите и определите структуру вместе в заголовке.
Трудно сказать наверняка, не видя реального кода, но ….