Компилятор flatc (flatbuffer) неправильно обрабатывает вложенное пространство имен

Я предоставляю следующий прото-файл компилятору flatbuffer для создания файла.fbs.

Файл: test.proto

    message A {
      optional int32 afoo = 1;
      message B {
       optional int32 bfoo_ = 1;
      }
      optional B bfoo= 2;
   }


  message C {
    optional int32 abar = 1;
    message B {
      optional int32 bbar_ = 1;
    }
    optional B bbar = 2;
  }

После этого я запустил: flatc --proto test.proto, который сгенерирует файл.fbs

Файл: test.fbs // Сгенерирован из test.proto

        namespace ;

        table A {
          afoo:int;
          bfoo:_A.B;
        }

        namespace _A;

        table B {
          bfoo_:int;
        }

        namespace ;

        table C {
          abar:int;
          bbar:_C.B;
        }

        namespace _C;

        table B {
          bbar_:int;
        }

Следует отметить, что "B" был извлечен в глобальное пространство имен. После этого я запустил flat -cpp test.proto, который в итоге генерирует неправильный заголовочный файл. Содержит два определения B

        struct B FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table

1 ответ

Решение

Это похоже на ошибку в FlatBuffers, в сгенерированном коде все они находятся в одном пространстве имен. Сообщить об ошибке здесь: https://github.com/google/flatbuffers/issues

Тем временем, раскройте.proto вручную, и он должен работать.

РЕДАКТИРОВАТЬ: Это было недавно исправлено: https://github.com/google/flatbuffers/commit/20c0082ee5bfeeecaa443c001a89934e9448ffa4

Другие вопросы по тегам