在我的项目中
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),但这并不好。
错误:从“int”到“SwitchValue”{aka“_SwitchValue”}的无效转换[-fpermissive] , 0,0 }
头文件正在尝试初始化值为
enum
的 0
类型。这在 C 中是有效的,但在 C++ 中默认是不允许的。
如果您在项目中使用 C++,您可能应该使用 Google 官方 C++ protobuf 库。
但是,如果由于某种原因您需要在 C++ 项目中使用 protobuf-c 库,请将
-fpermissive
添加到编译选项中。这将允许代码编译,但它也会禁用其他一些有用的编译器错误。