【问题标题】:error: dereferencing pointer to incomplete type ‘struct Array’错误:取消引用指向不完整类型“struct Array”的指针
【发布时间】:2021-11-25 21:30:09
【问题描述】:

我正在尝试在头文件中的结构中输入一个值。该值在主文件中给出,并作为参数传递给函数。但是我收到一条错误消息,上面写着error: dereferencing pointer to incomplete type ‘struct Array’ array->size = size; 编译器正在讨论array->size = size; 行中的箭头我在下面提供了我的文件。

Header.h:

#include <stdio.h>
//Include libraries used

struct Array {
  unsigned int size;
  unsigned int cap;
  int data;
};
//Declare struct Array

struct Array *newArray(unsigned int size, unsigned int cap);

function.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct Array *newArray(unsigned int size, unsigned int capacity ) {

  struct Array *array;

  array->size = size;

}

我的 main.c 文件已包含头文件,因此我的 function.c 文件中没有它。它还调用函数 newArray(5, 20),将 size 的值设为 5。如何修复此错误,以便结构中的 size 等于 5?谢谢,非常感谢您的帮助。

【问题讨论】:

  • 您需要在尝试取消引用之前设置array。这是一个未定义的指针值。
  • 此外,struct Array 没有成员 width。不要马虎,还要发布您正在尝试的确切代码,不要向我们显示不适用于您发布的代码的错误。
  • @Cheatah 我修复了代码,很抱歉我输入的信息有误。

标签: c struct declaration definition incomplete-type


【解决方案1】:

您需要在定义函数的模块function.c 中包含定义结构的标题Header.h

否则在这个函数定义中

struct Array *newArray(unsigned int width, unsigned int capacity ) {

  struct Array *array;

  array->width = width;

}

引入了不完整的类型说明符struct Array。而编译这个模块的编译器不知道结构中是否包含width这样的数据成员。

虽然您的代码 sn-p 似乎包含错字,因为结构定义不包含数据成员 width,并且消息中的编译器引用了数据成员 size

还要注意指针array没有初始化。

struct Array *array;

并且有一个不确定的值。

所以在任何情况下即使你将包含结构定义这个语句

array->width = width;

将调用未定义的行为。

【讨论】:

  • 我修正了我的代码,我输入了“宽度”,而它应该是“尺寸”
  • @Raswall 这不是很重要。我已经解释了错误信息的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2016-09-05
相关资源
最近更新 更多