flatc(flatbuffer)编译器无法以正确的方式处理嵌套命名空间

时间:2016-02-11 05:23:19

标签: protocol-buffers flatbuffers

我向flatbuffer编译器提供以下proto文件以生成.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 个答案:

答案 0 :(得分:0)

这似乎是FlatBuffers中的一个错误,在生成的代码中它们都在同一个命名空间中。在此处报告错误:https://github.com/google/flatbuffers/issues

同时,手动取消嵌套.proto,它应该可以工作。

编辑:最近修复了这个问题:https://github.com/google/flatbuffers/commit/20c0082ee5bfeeecaa443c001a89934e9448ffa4