我在重新解释变量时添加了一个问题,我不知道为什么......
int ProgressBar(const uint64_t data_sent, const uint64_t data_total, void const * const data) {
Dialog *dialog = reinterpret_cast<Dialog *>(data);
dialog->setValue((data_sent * 100) / data_total);
}
似乎不允许reinterpret_cast
并说
从'const void *)reinterpret_cast到Dialog *抛弃限定符
任何想法
答案 0 :(得分:35)
正如Nick Strupat在评论中所述,
reinterpret_cast无法抛弃cv-qualifiers
因此,您可以同时使用reinterpret_cast
和const_cast
。
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
答案 1 :(得分:6)
您还需要使用const_cast
删除const
限定符。此外,从void *
投射可以使用static_cast
,但不需要重新解释。例如:
Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);
但是,请确保Dialog实际上不是const
对象;尝试修改const对象(大概是setValue
会这样做)导致未定义的行为。
我建议重新考虑ProgressBar
的界面以避免需要这个演员表。