структура typedef в определении структуры файла заголовка в файле c

У меня есть 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

См. также:  Как скомпилировать программу C в GCC, чтобы включить отладку в WinDbg?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. andrew Patterson

    В файле заголовка вы только передали объявленную структуру. Это нормально, и вы сможете объявлять указатели и ссылки на структуру в заголовке (и в любом другом заголовке или файле cpp, который также включает этот заголовок).

    Поскольку компилятор видел только определение в модуле cpp, это единственное место, где вы сможете объявлять переменные типа struct example по значению или разыменовать указатели для доступа к членам. Вне файла cpp компилятор не знает, насколько велика структура и какие члены.

    Если вам нужно использовать структуру в нескольких модулях, объявите и определите структуру вместе в заголовке.

  2. andrew Patterson

    Трудно сказать наверняка, не видя реального кода, но ….

    struct example{
        char a[4];
        char b[4];
        char c[5];
    };
     ^ note the new semi colon.
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: