C语言 不允许使用不完整的类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 不允许使用不完整的类型相关的知识,希望对你有一定的参考价值。
还没写完,visual studio就报错了,这是怎么回事
下面几种表达方式是合法的:char **argv;
char (*argv)[];
char *argv[2];
你的写法等价于:
char *(argv[]);
即定义了一个指向数组的指针,由于数组长度不确定,无法计算计算指针单位长度,因此编译器说结构定义不完整。 参考技术A 就C语言来说,出现“不允许使用不完整信息”一般是你定义了一个结构体比如 struct int a; char b; mystruct; 然后你在使用这个结构体给变量定义的时候写成了这样: mystruct x,y; 在ANSI C语言中这样是不允许的(C++可以)要写成这样: struct mystruct x,y; 就没有问题了。追问
你这个复制的答案我已经看到过了
c - 错误:“不允许不完整的类型”,IAR 编译器
【中文标题】c - 错误:“不允许不完整的类型”,IAR 编译器【英文标题】:c - Error: "incomplete type is not allowed" , IAR compiler 【发布时间】:2017-03-05 04:58:56 【问题描述】:请指教,怎么了?
在.h
中struct
uint8_t time;
uint8_t type;
uint8_t phase;
uint8_t status;
Raw_data_struct;
typedef struct Raw_data_struct Getst_struct;
void Getst_resp(Getst_struct Data);
在.c
中void Getst_resp(Getst_struct Data) //Here Error: incomplete type is not allowed
;
【问题讨论】:
【参考方案1】:错误是由于声明“struct Raw_data_struct”时的混合造成的。你可以看看typedef struct vs struct definitions [duplicate]的帖子。
要声明你的结构,你必须使用:
struct Raw_data_struct
uint8_t time;
uint8_t type;
uint8_t phase;
uint8_t status;
;
而不是:
struct
uint8_t time;
uint8_t type;
uint8_t phase;
uint8_t status;
Raw_data_struct;
如果你想同时声明struct和typedef,你必须使用:
typedef struct Raw_data_struct
uint8_t time;
uint8_t type;
uint8_t phase;
uint8_t status;
Getst_struct;
【讨论】:
以上是关于C语言 不允许使用不完整的类型的主要内容,如果未能解决你的问题,请参考以下文章