【问题标题】:Bison and C++ with nested namespaces wont compile for me带有嵌套命名空间的 Bison 和 C++ 不会为我编译
【发布时间】:2012-01-09 03:12:39
【问题描述】:

我整天都在努力解决这个问题。我有一个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”文件夹下的“rework”分支。我正在使用g++ 4.6.1flex 2.5.35bison 2.4.1。有问题的文件是由野牛生成的Parser.[ch]pp

感谢您的帮助。

【问题讨论】:

  • 看不到生成的代码很难说。您可以将其添加到您的存储库或以其他方式使其在某处可用吗?
  • 完成。生成的文件添加到 git repo。

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


【解决方案1】:
 namespace Foo {
     class Bar;
     void x (class Bar); // refers to class Foo::Bar
     void y (class Baz); // refers to class ::Baz
 }

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

【讨论】:

  • 谢谢!我一整天都被困在这上面。
猜你喜欢
  • 2015-09-15
  • 2013-09-11
  • 2011-03-13
  • 1970-01-01
  • 2013-01-14
  • 2014-11-16
  • 2018-03-15
  • 2016-09-23
  • 1970-01-01
相关资源
最近更新 更多