我有以下文件:
\n\nCP时间
\n\n#ifndef CP_H_\n#define CP_H_\n\nclass CP {\npublic:\n enum Cardinalite {VIDE = \'\\0\', PTINT = \'?\', AST = \'*\', PLUS = \'+\'};\n\n CP(Cardinalite myCard);\n virtual ~CP();\nprivate:\n Cardinalite card;\n};\n\n#endif /* CP_H_ */\nRun Code Online (Sandbox Code Playgroud)\n\n和dtd.y
\n\n%{\n\nusing namespace std;\n#include <cstring>\n#include <cstdio>\n#include <cstdlib>\n#include "AnalyseurDTD/DtdDocument.h"\n#include "AnalyseurDTD/CP.h"\n\nvoid yyerror(char *msg);\nint yywrap(void);\nint yylex(void);\n\nDtdDocument * doc = new DtdDocument();\n%}\n\n%union { \n char *s;\n DtdElement * dtdelt;\n CP *cpt;\n CP::Cardinalite card;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n以及以下奇怪的错误:
\n\nAnalyseurDTD/dtd.y:20:2: error: \xe2\x80\x98CP\xe2\x80\x99 does not name a type\nAnalyseurDTD/dtd.y:21:2: error: \xe2\x80\x98CP\xe2\x80\x99 does not name a type\nRun Code Online (Sandbox Code Playgroud)\n\n奇怪的是,如果我把 CP *cpt; 在 DtdDocument * doc = new DtdDocument() 之后;我没有错误:/
\n在包含之前将标题包含在扫描仪文件中*.tab.h
// scanner.l file
%{
#include "myheader.h"
#include "yacc.tab.h"
// other C/C++ code
%}
// helper definitions
%%
// scanner rules
%%
Run Code Online (Sandbox Code Playgroud)
%union定义在,yacc.tab.h所以当你编译时,你需要确保编译器在处理之前看到你的新类型定义yacc.tab.h