变量名为TYPE_BOOL(c++代码)与ios宏冲突

variable named TYPE_BOOL(c++ code) is conflicted with ios macro

本文关键字:ios 冲突 代码 c++ TYPE BOOL 变量名      更新时间:2023-10-16

我正在尝试构建protobufc++到ios。但是它的实现包含一个TYPE_BOOL枚举变量,该变量与ios宏中的TYPE_BOOL冲突。编译失败

如何解决这个问题?

有几个合理的(但不太高明的)选项:

  1. #include任何protobuf头使用TYPE_BOOL 之前#include任何iOS头。例子:

    #include <google/protobuf/descriptor.h>
    #include <ConditionalMacros.h>
    

    允许你在自己的代码中使用iOS的TYPE_BOOL,但不能使用protobuf的TYPE_BOOL

  2. #include是iOS报头,然后是#undef TYPE_BOOL,然后是#include。例子:

    #include <ConditionalMacros.h>
    #undef TYPE_BOOL
    #include <google/protobuf/descriptor.h>
    

    允许你在自己的代码中使用protobuf的TYPE_BOOL,但不能使用iOS的TYPE_BOOL

  3. 如果你需要两个定义,这可能工作(未测试):

    #include <google/protobuf/descriptor.h>
    // Make a copy of TYPE_BOOL before it is hidden by a macro.
    const google::protobuf::FieldDescriptor::Type PROTOBUF_TYPE_BOOL =
        google::protobuf::FieldDescriptor::TYPE_BOOL;
    #include <ConditionalMacros.h>
    

    现在使用PROTOBUF_TYPE_BOOL当你需要Protobuf的定义

注意google/protobuf/descriptor.pb.h也定义了TYPE_BOOL。它可以用同样的方式解决,但大多数人不使用该头信息,所以我将其从示例中删除。