Bison union中类型报错 ‘***’ does not name a type

这个问题困扰了我好几个小时,百度找不到类似的问题,最终在 Stack overflow 上找到了答案。

问题不在 .y 文件中,而在其它文件引用 "parser.tab.hpp" (或其他 bison 生成的头文件) 时必须先引用 union 中使用的类所在的文件,需要特别注意 flex 的 .l 文件也需要满足这个要求。

比如我 .y 文件中 union 是这样

%union 
{
    ASTNode *node;
}

那么在 .l 和其它文件中,就不能这样写

%{
    #include <string>
    #include "parser.tab.hpp"
    #include "ASTNode.h"
%}

必须将 bison 头文件放在后面,像这样

%{
    #include <string>
    #include "ASTNode.h"
    #include "parser.tab.hpp"
%}

参考资料:

c++ - Bison and doesn't name a type error - Stack Overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值