C 联合中的结构指针
出于某种原因,联合中的结构指针似乎没有定义,即使我事先包含了C 联合中的结构指针,c,pointers,structure,union,yacc,C,Pointers,Structure,Union,Yacc,出于某种原因,联合中的结构指针似乎没有定义,即使我事先包含了.h %{ #include "agent.h" . . . %} %union {int iValue; char sIndex; ASTnode *nPtr; litNode *litPtr; ruleNode *rulePtr; exprNode *expPtr; actNode *actPtr; conNode *conPtr}; . . . %% 但是,在下使用这种结构指针的函数定义包括“agent.h”可以正常工作。为什么
.h
%{
#include "agent.h"
.
.
.
%}
%union {int iValue; char sIndex; ASTnode *nPtr; litNode *litPtr; ruleNode *rulePtr; exprNode *expPtr; actNode *actPtr; conNode *conPtr};
.
.
.
%%
但是,在下使用这种结构指针的函数定义包括“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
文件
我已经看到了关于这个问题的其他问题,但是他们通过包含头文件解决了这个问题,但是对于我来说,它仍然不起作用
谢谢。看来,在声明include
y.tab.h
之前,我必须包含.h
文件。因此,我还必须在Lex文件中包含.h
,在调用include“y.tab.h”
之前,编译器正在抱怨未定义的类型(ASTnode
),您可能已经将其定义为结构,但没有定义为typedef
(在C++中,Stutt自动得到一个同名的类型,但在C中不是真的),或者在YACC <<代码> %Ung//>语句中使用它时,您已经忽略了它。
该问题与yacc无关。您使用的类型未在任何位置声明。请在标题中搜索类型ASTnode
的定义。您可能缺少typedef
这同样适用于类型
litNode
ruleNode
exprNode
actNode
conNode
这些类型是应用程序类型,在创建的union
类型中使用它们之前必须定义它们。它们很可能是在.h
文件中定义的,您必须在每个文件的开头包含生成的y.tab.h
和C部分(被%包围的部分){
和%}
)赋予编译器访问这些类型定义的权限。请参阅块,这些块也会复制到生成的头文件中。请不要发布仅显示yacc(1)的一般结构的代码片段
源文件。假设在此论坛中收听的用户知道yacc(1)的结构
文件,更好地格式化内部定义的联合体的结构,因为很难从错误消息中识别任何内容,因为所有内容都在同一行。顺便说一句,显示类型ASTnode
的定义,因为错误表明该类型未在任何地方定义,并且您不会对类型。除了没有显示任何内容的文件agent.h
,他似乎没有包含任何内容。编译器消息抱怨未定义的类型ASTnode
,该类型可能没有在任何地方被typedef
,或者是错误的。y.tab.h
可能根本不需要(在生成的y.tab.c
文件中不需要它)