码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-07 11:08:02      阅读:468      评论:0      收藏:0      [点我收藏+]

标签:io   ar   使用   sp   strong   文件   on   问题   cti   

在使用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: dereferencing pointer to incomplete type b.c:13: error: dereferencing pointer to incomplete tyd;"

 

如下修改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 pointer to incomplete type 的办法

标签:io   ar   使用   sp   strong   文件   on   问题   cti   

原文地址:http://www.cnblogs.com/qunxuan/p/4080730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!