C 结构范围

C 结构范围,c,scope,structure,C,Scope,Structure,我已经正确地定义了结构。我看到一些讨论,认为此错误与作用域有关,但不知道如何修复它。不确定这是否是问题所在,但一些编译器无法识别void main(),因此: 否则它可能在你的prique.h模块中 此外,如果队列_节点的定义方式相同(typedef struct queue_node{…}queue_node),则可能不需要struct关键字: int main() 您必须知道,您也可以编译*.h文件。这样做: gcc-墙价h 确保您的头文件声明都是正确的。我猜queue\u节点与pqueu

我已经正确地定义了结构。我看到一些讨论,认为此错误与作用域有关,但不知道如何修复它。

不确定这是否是问题所在,但一些编译器无法识别void main(),因此:

否则它可能在你的prique.h模块中

此外,如果队列_节点的定义方式相同(typedef struct queue_node{…}queue_node),则可能不需要struct关键字:

int main()

您必须知道,您也可以编译*.h文件。这样做:

gcc-墙价h


确保您的头文件声明都是正确的。

我猜
queue\u节点
pqueue
相同。如果是这样的话 那么问题就应该解决了。如果没有,则您的include文件中可能没有定义
queue\u节点

下面的代码可能就是您想要的

typedef struct _pqueue
{
    int size;
    queue_node *first;
} _pqueue;

如果您共享该结构,可能会有所帮助。此外,还应避免仅复制/粘贴问题标题中的错误。它不属于那里。确切的错误(显示在屏幕上)属于问题的主体。您的
prique.h
中有什么内容?是否关闭了所有以
结尾的结构定义?带有前导下划线的标识符是为语言和实现保留的(结构名称可能是例外?)。此外,main()应该返回int.@wildplasser:更准确地说,在标准中,以下划线和小写字母开头的标识符是保留的,如果它们具有文件范围。Struct标记位于单独的名称空间中(因为C89/ANSI,IIRC),但现在似乎OP对Struct使用了与typedef相同的名称,这至少是一个非常坏的习惯。(就像typedef在大多数情况下是个坏习惯一样)还有第二个违反C正确性的情况。前导u是为编译器实现保留的,程序员不应使用它。该错误消息和无效主代码都不是导致该错误消息的原因。
int main()
typedef struct _pqueue
{
    int size;
    queue_node *first;
} _pqueue;
typedef struct pqueue {
    int size;
    struct pqueue *first;
} pqueue_t;

void
main()
{
    pqueue_t *test;

}