这个问题类似于this one,但对于yyparse,而不是yylex。

我已经为此战斗了几个小时!我想从C程序调用yyparse(实际上是C ++,但是我最终还是使用旧的flex / bison而不是较新的C ++低音扬声器(甚至没有意识到C ++版本存在))。唯一的错误是'yyparse' was not declared in this scope。我尝试将变量定义为全局变量,但似乎不起作用。

在Flex文件中,我尝试过:

extern "C" {
  int yyparse();
}


这在野牛文件中:

extern int yyparse();


但是它什么也没做。

所以..我想我链接错了。问题是我使用的是Qt,它会自动生成make文件,因此,如果不能再次覆盖它,我将无法对其进行编辑。有什么方法可以解决问题而无需更改链接?如果不是,该链接是如何进行的?

最佳答案

yyparse声明应该放在调用yyparse的C ++文件包含的标头中,而不是flex或bison文件中,因为C ++文件是需要声明的文件。野牛将在其生成的源文件中创建所需的声明。

10-08 11:27