Разыменование указателя на неполный тип [Работа со структурами] - PullRequest
0 голосов
/ 12 ноября 2018

Я объявил:

#include stdio.h

#include stdlib.h

#include string.h

#include dictionary.h

int main( int argc, char ** argv ){

    char * dictionary_name = DEFAULT_DICTIONARY;
    dictionary_t dictionary;
    dictionary->entries = 1;
    if ( dictionary == NULL){
        printf("NULL\n");
        return -1;
    }
    return 0;
}

Ошибка:

src/main.c: In function ‘main’:
src/main.c:40:12: error: dereferencing pointer to incomplete type ‘struct dictionary_s’
dictionary->entries = 1;

In dictionary.c:

#include dictionary.h

struct dictionary_s{

    char * name;
    llist_t content;
    int entries;
};

В заголовке (dictionary.h):

typedef struct dictionary_s* dictionary_t;

Я впервые задаю вопрос здесь, поэтому, пожалуйста, прости меня, если я упустил что-то важное.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Вы должны поместить определение struct в заголовочный файл, а не в dictionary.c -файл; в противном случае его компоненты не известны за пределами dictionary.c.

Итак, ваш dictionary.h должен выглядеть следующим образом:

struct dictionary_s{

    char * name;
    llist_t content;
    int entries;
};

typedef struct dictionary_s* dictionary_t;

Ваш файл dictionary.c, вероятно, устарел.

0 голосов
/ 12 ноября 2018

Файл dictionary.h содержит только имя типа struct dictionary_s, так что это все, что видно вашей функции main.Это означает, что он не знает, что содержит структура.

Вам необходимо переместить определение struct dictionary_s в заголовочный файл.Таким образом, его можно использовать с main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...