取消引用不完整类型的指针[在结构上工作]

时间:2018-11-12 18:18:42

标签: c pointers types

我已经声明:

#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;

在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 :(得分:0)

文件dictionary.h仅包含类型struct dictionary_s的名称,因此对main函数可见。这意味着它不知道结构包含什么。

您需要将struct dictionary_s的定义移到头文件中。这样就可以从main中使用它。

答案 1 :(得分:0)

您必须将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可能已过时。