协议缓冲区。通过 proto-c 生成的头文件出错。无效转换

问题描述 投票:0回答:1

在我的项目中

C/C++
我必须将Protocol Buffer与
protoc
文件一起使用。使用以下工具从文件
switch.proto
生成代码后

protoc-c -I="./proto/" --c_out="./protobuf-c" proto/*.pro

我收到文件。标头

switch.pb-c.h
和源文件
switch.pb-c.c
。问题出在头文件中生成的代码中,这给了我错误


error: invalid conversion from 'int' to 'SwitchValue' {aka '_SwitchValue'} [-fpermissive]
         , 0,0 }

我在头文件中的代码中发现了这个错误,我不应该编辑:

#define SWITCH_REPORT__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&switch_report__descriptor) \
    , 0,0 }

syntax = "proto3";

import "metadata.proto";

message SwitchRequest {
  DeviceMetadata metadata = 1;
}

message SwitchResponse {}

message SwitchReport {
  SwitchValue value = 1;
}

enum SwitchValue {
  SWITCH_UNKNOWN = 0;
  SWITCH_ON = 1;
  SWITCH_OFF = 2;
}

暂时不知道如何解决。 有人怀疑一件事,就是旧的 gcc 编译器 8.3.0。如果我是对的,我也必须升级我的系统(实际上是 Debian 9.8),但这并不好。

c++ protocol-buffers debian-stretch
1个回答
0
投票

错误:从“int”到“SwitchValue”{aka“_SwitchValue”}的无效转换[-fpermissive] , 0,0 }

头文件正在尝试初始化值为

enum
0
类型。这在 C 中是有效的,但在 C++ 中默认是不允许的。

如果您在项目中使用 C++,您可能应该使用 Google 官方 C++ protobuf 库。

但是,如果由于某种原因您需要在 C++ 项目中使用 protobuf-c 库,请将

-fpermissive
添加到编译选项中。这将允许代码编译,但它也会禁用其他一些有用的编译器错误。

© www.soinside.com 2019 - 2024. All rights reserved.