2013-10-08 62 views
0

我有在sampleHeader.h一个struct一个typedef类似于:typedef结构在头文件中的结构定义在C文件

typedef struct example Example; 

,我有我的sampleSource.c:

struct example{ 
    char a[4]; 
    char b[4]; 
    char c[5]; 
} 

现在由于某种原因,当我返回一个指向我的主函数的指针,该函数引用已经创建的结构(和malloc'd)并尝试打印出每个成员的值时,我得到一条错误, derefence不完整类型“

有什么想法?

+2

我们能否看到实际得到“无法取消引用不完整类型”错误的代码位? –

+0

看看这里:https://bbs.archlinux.org/viewtopic.php?id=141686 –

+0

我们需要看代码,但是你需要一个';'在结构定义的末尾。 –

回答

0

很难说肯定没有看到实际的代码,但是....

struct example{ 
    char a[4]; 
    char b[4]; 
    char c[5]; 
}; 
^ note the new semi colon. 
1

在头文件中你只向前声明的结构。这很好,你可以在头文件中声明结构的指针和引用(以及包含这个头文件的任何其他头文件或cpp文件)。

由于编译器只能看到cpp模块中的定义,因此这是唯一可以通过值声明类型struct example的变量或解除引用访问成员的指针的地方。在cpp文件之外,编译器不知道结构有多大或者成员是什么。

如果您需要在多个模块中使用该结构,请在标头中声明并定义结构。