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语言 不允许使用不完整的类型的主要内容,如果未能解决你的问题,请参考以下文章

不允许使用不完整的类型 c语言

c语言报错不允许使用不完整类型,让用户自定义数组大小。

用VS15编写多文件程序的时候,c语言提示不允许使用不完整的类型

C语言不允许使用不完整的类型报错是啥意思啊

c++mfc为何报错不允许指针指向不完整的类类型?

c语言中,定义数组和引用数组时,其数组的下标的数据类型分别允许是啥?