我整天都试图解决这个问题。我有一个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.1
,flex 2.5.35
和bison 2.4.1
。有问题的文件是Parser.[ch]pp
,由野牛生成。
感谢您的帮助。
答案 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
。