[C++编译]field has incomplete type

当类型名出现过,但未定义完整时,用此类型名声明变量,将导致field has incomplete type错误。当如下情况定义struct变量将导致这种错误发生。

当头文件中如下:

//定义一个struct

struct A{
//some var here...;
}

//定义一些函数,返回为A*:

A* doSth1(){
}
//或者这样,类型指针作为参数:

doSth2(A* a){
}

由于struct A只是用到指针接口,而并不被使用者需要,所以可以把struct A隐藏起来,像这样:

//注释掉定义:

//struct A{
//some var here...;
//}

typedef struct A A;//struct A和A同名是可以的。

//定义一些函数,返回为A*:

A* doSth1(){
}

//或者这样,类型指针作为参数:

doSth2(A* a){
}

//由typedef来暴露struct A,但是由于没有A的具体定义,所以使用者无法用A来定义变量,只能定义A的指针:

A a;//Error:field has incomplete type
A *pa;//OK

所以遇到编译错误:field has incomplete type时,可以检查下是否把应定义为指针的变量定义为一般变量了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值