将 unsigned int 分配给结构中的数组枚举时出现编译错误

Posted

技术标签:

【中文标题】将 unsigned int 分配给结构中的数组枚举时出现编译错误【英文标题】:Compilation error in assigning unsigned int to an enum of arrays within structure 【发布时间】:2013-03-07 06:33:16 【问题描述】:
typedef struct 
uint64_t low;
uint64_t cache_size;
uint32_t range;
uint8_t cache;

/// Number of symbols in the tables
size_t count;

/// rc_encode()'s position in the tables
size_t pos;

/// Symbols to encode
enum 
    RC_BIT_0,
    RC_BIT_1,
    RC_DIRECT_0,
    RC_DIRECT_1,
    RC_FLUSH,
 symbols[RC_SYMBOLS_MAX];

/// Probabilities associated with RC_BIT_0 or RC_BIT_1
probability *probs[RC_SYMBOLS_MAX];

 lzma_range_encoder;

//以上是结构体。

//下面是函数

static inline void
rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit)

rc->symbols[rc->count] = bit;      // problem code line 69
rc->probs[rc->count] = prob;
++rc->count;

//错误: 错误 C2440:“=”:无法从“uint32_t”转换为“lzma_range_encoder::” 转换为枚举类型需要显式转换(static_cast、C 样式转换或函数样式转换)

'bit' 是 uint32_t,需要在 lzma_range_encoder->symbols 中存储(类型转换),但我无法以某种方式做到这一点。 尝试了每一个 p&c。此外,搜索了有关此的早期问题(static_cast 和所有但没有运气)

我猜这是一个简单的问题。但我被困住了两天。请帮忙。谢谢

【问题讨论】:

为什么要强制转换,而不是在这里使用枚举?您的枚举未命名,因此您不能转换为这种类型(我认为只能通过 C++11 中的 decltype 使用)。 什么是符号[RC_SYMBOLS_MAX];在这里。 这不是名字。它是这个未命名枚举的数组。 【参考方案1】:

在枚举中添加一个名称

enum symbol_enum

    // ...
 symbols[RC_SYMBOLS_MAX];

然后你可以投射到它:

rc->symbols[rc->count] = static_cast<lzma_range_encoder::symbol_enum>(bit);

附言。在 C++ 中,您不需要将 typedef 用于结构或类。正常的结构名称可以按原样使用。

【讨论】:

编译得很好。谢谢约阿希姆。 ForEveR:明白你的意思。愚蠢的错误。其实这个代码库不是我的。我直接编译这个。【参考方案2】:

您可以在 C++11 中使用以下带有未命名枚举的东西。

enum 
    RC_BIT_0,
    RC_BIT_1,
    RC_DIRECT_0,
    RC_DIRECT_1,
    RC_FLUSH,
 symbols[RC_SYMBOLS_MAX];

rc->symbols[rc->count] = 
static_cast<std::decay<std::decltype(*symbols)>::type>(bit);

【讨论】:

@user1881950 包含 type_traits 标头。 两个答案都很好。但目前只能接受其中1个。感谢 ForEveR 和 Joachim

以上是关于将 unsigned int 分配给结构中的数组枚举时出现编译错误的主要内容,如果未能解决你的问题,请参考以下文章

为数组中的 unsigned char 分配一个 short 的结果是啥?

将一个int(例如10)分配给c ++中结构中的字符串成员,为啥它编译成功?

对删除分配给结构数组的动态内存感到困惑

将二维指针数组中的字符串分配给一维指针数组

将 int[][] 分配给 int** [重复]

如何将 int 的数字分配给数组 c++