初始化C结构以便在全球范围内使用

时间:2014-04-06 17:29:19

标签: c data-structures struct

我有以下结构:

dict.c

typedef struct dictionary {
    int key;
    char *word;
    char *desc;
} dict;

的main.c

#include "dict.c"

dict * d;

some function() {
    d->key = 1;
}

这会抛出一个错误:取消引用指向不完整类型的指针。

我如何允许其他函数读入结构?

2 个答案:

答案 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};