【发布时间】:2011-07-09 16:31:10
【问题描述】:
这个问题类似于this one,但针对的是 yyparse,而不是 yylex。
我已经为此奋斗了好几个小时了!我想从 C 程序中调用 yyparse (实际上是 C++ 程序,但我最终使用旧的 flex/bison 而不是 C++ woops 的新程序(甚至没有意识到 C++ 版本甚至存在))。唯一的错误是'yyparse' was not declared in this scope。我尝试将变量定义为全局变量,但它似乎不起作用。
在我尝试的 Flex 文件中:
extern "C" {
int yyparse();
}
这在 Bison 文件中:
extern int yyparse();
但它什么也没做。
所以.. 我想我链接错了。问题是我正在使用 Qt 自动构建 make 文件,所以我无法编辑它而不会再次被覆盖。有没有办法在不改变链接的情况下解决问题?如果不是,如何进行链接?
【问题讨论】:
-
您应该显示文件名和生成它们的错误消息。从您的问题中不清楚问题是否在于您正在使用 C++ 编译器编译 Bison 输出并且它抱怨没有事先定义
yyparse(),或者问题是否出在调用 @ 的代码中987654326@。你把extern int yyparse();声明放在 Bison 文件的什么位置?它是在文件顶部的%{ ... %}部分中,还是在其他地方?