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

在使用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);
}

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值