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->符号中存储(类型化),但我无法以某种方式进行。 尝试了所有的p& c。此外,搜索了有关此问题的早期问题(static_cast和所有但没有运气)
我猜这是一个简单的问题。但是我被困2天了。请帮忙。感谢
答案 0 :(得分:1)
在枚举中添加名称:
enum symbol_enum
{
// ...
} symbols[RC_SYMBOLS_MAX];
然后你可以投它:
rc->symbols[rc->count] = static_cast<lzma_range_encoder::symbol_enum>(bit);
PS。在C ++中,您不需要对结构或类使用typedef
。正常的结构名称可以按原样使用。
答案 1 :(得分:1)
对于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);