Bison / Yacc:yyparse未在此范围内声明

时间:2011-07-09 16:31:10

标签: c bison yacc lex

此问题与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();

但它没有做任何事情。

所以..我想我错了。问题是我正在使用自动构建make文件的Qt,所以如果没有它再次被过度重写我就无法编辑它。有没有办法解决问题而不改变链接?如果没有,那么链接是如何完成的呢?

1 个答案:

答案 0 :(得分:1)

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