您的位置:首页 > Web前端

解决编译错误:dereferencing pointer to incomplete type 的办法

2014-11-07 08:41 696 查看
在使用c语言写程序时,可能遇到错误:error :dereferencing pointer to incomplete type。其实,这个错误是指针指向的结构体类型没有定义。

原因可能有很多,但最多情况可能下面两种:

1,使用库函数或内核等提供的结构体时,没有包含相应的头文件。解决方法很简单,就是包含对应头文件就ok了。

2,若是自己定义的结构体,而且这个结构体恰恰是定义在.c文件中。在这种情况下,在其他.c文件中使用该结构体指针时,也会出现类似错误。

就第二种情况,笔者找到两种解决方法:

1,将结构体定义放到.h文件中,然后在使用该结构体的.c文件中分别包含这个文件。这种方法较符合常规。

在这里需要注意,在定义头文件时,要使用预编译语句将头文件包围起来。这样做是防止出现头文件被重复包含的错误。

例如:

#ifndef  _ABC_H

#define _ABC_H

结构体定义

#endif

2,将结构体定义从上一个.c文件中拷至出错的.c文件中,因为结构体定义只是声明了结构体的大小并不真实分配空间,所以这样做不会有问题。

示例代码:

a.c

#include <stdio.h>

struct obj_t {

int x;

int y;

};

struct obj_t obj;

struct obj_t * get_obj()

{

obj.x = 11;

obj.y = 22;

return &obj;

}

void show(struct obj_t *p)

{

printf("a=%d\nb=%d\n", p->x, p->y, __func__);

}

b.c

void call_show()

{

struct obj_t *p = get_obj();

p->x = 111;

p->y = 222;

show(p);

}

main.c

int main(int argc, char **argv)

{

call_show();

}

执行命令:gcc a.c b.c main.c -o test

出现如下错误:

b.c: In function ‘call_show’:

b.c:10: warning: initialization makes pointer from integer without a cast
b.c:12: error: [b]dereferencing pointer to incomplete type

b.c:13: error: dereferencing pointer to incomplete tyd;"[/b]

如下修改b.c后,错误消失

struct obj_t {

int x;

int y;

};

void call_show()

{

struct obj_t *p = get_obj();

p->x = 111;

p->y = 222;

show(p);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dereferencing pointe
相关文章推荐