我有以下结构:
typedef struct dictionary {
int key;
char *word;
char *desc;
} dict;
#include "dict.c"
dict * d;
some function() {
d->key = 1;
}
这会抛出一个错误:取消引用指向不完整类型的指针。
我如何允许其他函数读入结构?
答案 0 :(得分:1)
如果你想要堆上的dictionary
对象,那么你需要为它分配内存,如下所示。
dict * pd = NULL;
/* ... */
pd = malloc( sizeof *pd );
if( !pd ) { /* handle malloc failure, e.g. syslog, assert */ }
pd->key = 1;
否则,您可能在堆栈中有dictionary
对象。
dict d;
d.key = 1;
此外,传统上,类型定义保存在标头.h
文件中。
// dictionary.h
typedef struct DictElem {
int key;
char *word;
char *desc;
} DictElem;
// main.c
#include "dictionary.h"
// Then, either
DictElem * pd = NULL;
// ... or
DictElem d;
// ... and see above
答案 1 :(得分:1)
你正在分配一个全局指针,不要。分配真正的结构并初始化声明:
#include "dict.c"
dict d = {.key = 1, .word = &word_data, .desc = &desc_data};