gpt4 book ai didi

c - Yacc, union 结构指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:19 24 4
gpt4 key购买 nike

出于某种原因, union 中的结构指针似乎没有定义,即使我事先包含了 .h

%{
#include "agent.h"
.
.
.
%}
%union {int iValue; char sIndex; ASTnode *nPtr; litNode *litPtr; ruleNode *rulePtr; exprNode *expPtr; actNode *actPtr; conNode *conPtr};
.
.
.
%%

但是,在 #include "agent.h" 下使用此类结构指针的函数定义工作正常。为什么会出现错误:

y.tab.h:58:15: error: unknown type name ‘ASTnode’
typedef union {int iValue; char sIndex; ASTnode *nPtr; litNode *litPtr; ruleNode *rulePtr; exprNode *expPtr; actNode *actPtr; conNode *conPtr} YYSTYPE;
^
y.tab.h:58:15: error: unknown type name ‘litNode’
y.tab.h:58:15: error: unknown type name ‘ruleNode’
y.tab.h:58:15: error: unknown type name ‘exprNode’
y.tab.h:58:15: error: unknown type name ‘actNode’
y.tab.h:58:15: error: unknown type name ‘conNode’

即使我包含了 .h 文件?

我看到了关于这个问题的其他问题,但他们已经通过包含头文件解决了这个问题,但对于我来说,它仍然不起作用。

谢谢。

最佳答案

编译器提示未定义类型 (ASTnode),您可能已将其定义为 struct,但未使用 typedef (在 C++ 中,一个结构会自动获得一个用相同名称定义的类型,但在 C 中不是这样)或者您在 yacc 的 %union 句子中使用它时拼写错误。

问题与yacc无关。您正在使用未在任何地方声明的类型。在标题中搜索类型 ASTnode 的定义。可能您在某处缺少 typedef

同样适用于类型

  • litNode
  • 规则节点
  • 表达式节点
  • actNode
  • 连接节点

这些类型是应用程序类型,您必须在创建的 union 类型中使用它们之前定义它们。它们很可能在 .h 文件中定义,您必须在每个文件的开头包含生成的 y.tab.h 和 C 部分(被 %{%} 包围的那个)让编译器访问这些类型定义。

关于c - Yacc, union 结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56087792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com