Бизон и C ++ с вложенными пространствами имен не будут компилироваться для меня - PullRequest
0 голосов
/ 09 января 2012

Я весь день колотил головой, пытаясь это исправить.У меня есть bison/flex/c++ проект , над которым я работаю, игнорируя тот факт, что семантические действия являются неполными и приведут к ошибкам компиляции, когда это произойдет, я не могу сгенерировать сгенерированный парсер.Я получаю следующее:

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, с использованием ветки "rework" в папке "script".Я использую g++ 4.6.1, flex 2.5.35 и bison 2.4.1.Эти файлы Parser.[ch]pp, сгенерированные бизоном.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 09 января 2012
 namespace Foo {
     class Bar;
     void x (class Bar); // refers to class Foo::Bar
     void y (class Baz); // refers to class ::Baz
 }

Форвард-объявление class Driver в пространстве имен.

...