当类型名出现过,但未定义完整时,用此类型名声明变量,将导致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时,可以检查下是否把应定义为指针的变量定义为一般变量了。