変数の再解釈に関する問題を追加しましたが、理由はわかりません。
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
許可されていないようで、言う
reconpret_castを 'const void *)からDialog *に変更して修飾子をキャストします
何か案が
Nick Strupatがコメントで述べたように、
reinterpret_castはcv修飾子を捨てることができません
したがって、reinterpret_cast
およびconst_cast
一緒に。
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
const
修飾子を削除するには、const_cast
も使用する必要があります。また、void *
からのキャストではstatic_cast
を使用できます。再解釈する必要はありません。例えば:
Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);
ただし、Dialogが実際にconst
オブジェクトではないことを確認してください。 constオブジェクトを変更しようとすると(おそらくsetValue
がこれを行います)、未定義の動作が発生します。
このキャストが不要になるのを避けるために、ProgressBar
へのインターフェイスを再考することをお勧めします。