C 字段的类型不完整,即使包含
我的一个头文件queue.h有一个结构,它在另一个文件pathing.h中定义了一个结构。queue.h包括pathing.h,但不包括pathing.h。编译器gcc告诉我该结构是一个不完整的类型。项目中的多个文件都包含这两个文件,但我确保它们首先包含pathing.h。我看过很多有同样问题的帖子,但它们似乎是由转发声明或循环包含引起的。据我所知,我的朋友不是 队列.hC 字段的类型不完整,即使包含,c,C,我的一个头文件queue.h有一个结构,它在另一个文件pathing.h中定义了一个结构。queue.h包括pathing.h,但不包括pathing.h。编译器gcc告诉我该结构是一个不完整的类型。项目中的多个文件都包含这两个文件,但我确保它们首先包含pathing.h。我看过很多有同样问题的帖子,但它们似乎是由转发声明或循环包含引起的。据我所知,我的朋友不是 队列.h #include "pathing.h" typedef struct _queue{ struct queue*
#include "pathing.h"
typedef struct _queue{
struct queue* below;
struct point_t value;
}queue;
point_t pop(queue* a);
point_t peek(queue a);
void add(queue* a, point_t pointer);
pathing.h
#ifndef _pathing_
#define _pathing_
typedef unsigned char byte_t;
typedef struct _point_t{
int x;
int y;
}point_t;
int exec(int argc,char* arg[]);
#endif
另外,我是C语言的新手,正在自学,所以如果这段代码的风格不好或者可以做得非常简单,请告诉我
typedef struct _queue{
// This is a typo. You are missing the _ before queue.
// struct queue* below;
struct _queue* below;
struct point_t value;
}queue;
关于point\u t
,您的代码中没有struct point\u t
这样的东西。您可以使用:
struct _point_t value;
或
关于point\u t
,您的代码中没有struct point\u t
这样的东西。您可以使用:
struct _point_t value;
或
结构的名称是什么,
\u queue
或queue
?删除队列
结构中结构点t值
前面的结构。@JoachimPileborg,这是我从阅读其他人代码中获得的格式。我把它称为队列,这似乎有效。我真的不知道为什么和我一起工作的人把_名字放在它前面。@ckruczek,谢谢,这起作用了。我不是说前导下划线,我是说名字不匹配,你定义了一个名为\u queue
的结构,但在结构内部使用queue
。可能会将其与您稍后定义的队列
类型别名混淆。结构的名称是什么,\u queue
或队列
?删除队列
结构中结构点
值前面的结构。@JoachimPileborg,这是我从阅读其他人的代码中选择的格式。我把它称为队列,这似乎有效。我真的不知道为什么和我一起工作的人把_名字放在它前面。@ckruczek,谢谢,这起作用了。我不是说前导下划线,我是说名字不匹配,你定义了一个名为\u queue
的结构,但在结构内部使用queue
。可能会将其与您稍后定义的队列
类型别名混淆。@yesennes如果您发布有关生成错误的问题,请始终在问题中包含实际的、完整的和未编辑的错误输出。这使得查看错误的实际内容变得更加容易。@yesennes如果您发布了关于生成错误的问题,请始终在问题中包含实际的、完整的和未编辑的错误输出。这使得我们更容易看到错误的实质。