该错误指的是是不完整的类型,一般出现在定义结构体指针类型声明的时候。真正出现的问题原因是这个结构体根本就没有定义,或者是定义的头文件并没有被正确引用进来。
想要解决该问题,有两种方法可供参考:
1.包含定义该结构体的头文件
2.如果结构定义在c文件中,而不是定义在h文件的话,建议将结构体定义在h文件中,然后再包含.h的这种做法
3.直接将该结构体拷贝到报错的文件中(不建议使用)
例:
test3:
#include<stdio.h>int main(int argc, char **argv)
{call_num();
}test2:
#include <stdio.h>void call_num()
{struct zt_t *p = get_num();p->x = 356;p->y = 325;show(p);
}test1:
#include <stdio.h>struct zt_t {int x;int y;
};struct zt_t num;struct zt_t * get_num()
{num.x = 123;num.y = 456;return #
}void show(struct zt_t *buf)
{printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}
编译结果如下:
修改如下所示:
test3:
#include<stdio.h>
#include "test.h"int main(int argc, char **argv)
{call_num();
}test2:
#include <stdio.h>
#include "test.h"void call_num()
{struct zt_t *p = get_num();p->x = 356;p->y = 325;show(p);
}test1:
#include <stdio.h>
#include "test.h"struct zt_t num;struct zt_t * get_num()
{num.x = 123;num.y = 456;return #
}void show(struct zt_t *buf)
{printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}test.h
#ifndef __TEST_H__
#define __TEST_H__struct zt_t {int x;int y;
};
struct zt_t * get_num();#endif
编译结果如下所示: