c++ - C++中的特殊枚举

标签 c++ struct enums initialization

在一个图书馆里,我遇到了一个奇怪的枚举结构:

typedef struct SetControl
{
  const static uint16_t RC_MODE_ERROR;
  const static uint16_t RELEASE_CONTROL_SUCCESS;
  const static uint16_t OBTAIN_CONTROL_SUCCESS;
  const static uint16_t OBTAIN_CONTROL_IN_PROGRESS;
  const static uint16_t RELEASE_CONTROL_IN_PROGRESS;
  const static uint16_t RC_NEED_MODE_F;
  const static uint16_t RC_NEED_MODE_P;
  const static uint16_t IOC_OBTAIN_CONTROL_ERROR;
} SetControl;

成员未在任何地方初始化,但尽管如此,RC_MODE_ERROR 等于 0,RELEASE_CONTROL_SUCCESS 等于 1 等等。我知道,因为我已经用 printf 记录了它。到目前为止我还没有看到类似的东西。为什么它甚至可以工作(我认为默认情况下值将由随机数据初始化,或者 0)?与标准 enum 相比,它是否有任何附加值(value)?我将不胜感激。

最佳答案

首先,这不是枚举,这是一个结构。这些是 different concepts ,但我想您知道,只是对此处的用法感到困惑。

不会将结构的成员分配给这些值(例如 enum 会发生这种情况)。

我相当确定这些成员在您的代码中某处被初始化,或者它们是宏,因此在某处定义。


搜索后Github ,它们被初始化,像这样:

const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::RC_MODE_ERROR = 0x0000;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::RELEASE_CONTROL_SUCCESS = 0x0001;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::OBTAIN_CONTROL_SUCCESS = 0x0002;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::OBTAIN_CONTROL_IN_PROGRESS = 0x0003;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::RELEASE_CONTROL_IN_PROGRESS = 0x0004;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::RC_NEED_MODE_F = 0x0006;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::RC_NEED_MODE_P = 0x0005;
const uint16_t DJI::OSDK::ErrorCode::ControlACK::SetControl::IOC_OBTAIN_CONTROL_ERROR = 0x00C9;

dji_error.cpp .

关于c++ - C++中的特殊枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46096219/

相关文章:

c++ - gdb backtrace 不显示它来自的虚函数

c++ - 可移植比较和交换(原子操作)C/C++ 库?

c - 使用数组中的数据初始化结构

c - 在C中将一个单词(char [])插入一个结构单词(char [])中

rust - 匹配语句中明显未使用的变量

C++ 输出顺序

c++ - 我怎样才能让 WinProc 访问由它创建的对象?

c - 应为 const char * 但参数是 char 类型

ios - 为什么在枚举和开关的情况下需要强制展开?

java - 检查枚举值,然后添加另一个字段(Java)