带嵌套命名空间的Bison和C ++不会为我编译

时间:2012-01-09 03:12:40

标签: c++ c++11 bison flex-lexer

我整天都试图解决这个问题。我有一个bison/flex/c++ project我正在研究,忽略语义动作不完整的事实,当它到达那里时会导致编译错误,我无法让生成的解析器进行编译。我得到以下内容:

g++ -I. -g3 -std=c++0x -DYYDEBUG=1 -Werror -Wfatal-errors -pipe -fomit-frame-pointer -D_FORTIFY_SOURCE=2 -fstack-protector-all -o ndes.bin Parser.cpp Scanner.cpp Driver.cpp
Parser.cpp:174:3: error: prototype for ‘nde::script::Parser::Parser(nde::script::Driver&)’ does not match any in class ‘nde::script::Parser’
compilation terminated due to -Wfatal-errors.
make: *** [all] Error 1

现在,根据错误判断,我认为可以直接修复:头文件与源文件不匹配。所以,我打开它们,我发现它们之间没有区别。

我的项目的完整源代码在上面的github链接中,使用“script”文件夹下的“返工”分支。我正在使用g++ 4.6.1flex 2.5.35bison 2.4.1。有问题的文件是Parser.[ch]pp,由野牛生成。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

 namespace Foo {
     class Bar;
     void x (class Bar); // refers to class Foo::Bar
     void y (class Baz); // refers to class ::Baz
 }

在命名空间中转发声明class Driver