reinterpret_cast casts away qualifiers
42,410
Solution 1
As Nick Strupat stated in comment,
reinterpret_cast can't cast away cv-qualifiers
So you can use reinterpret_cast
and const_cast
together.
Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));
Solution 2
You need to also use a const_cast
to remove const
qualifiers. Also, casting from void *
can use static_cast
, it does not need to reinterpret. For example:
Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);
However , make sure that the Dialog is actually not a const
object; attempting to modify a const object (presumably setValue
does this) causes undefined behaviour.
I'd suggest rethinking the interface to ProgressBar
to avoid needing this cast.
Author by
Seb
Updated on July 09, 2022Comments
-
Seb almost 2 years
I add an issue on reinterpreting a variable and I don't know why..
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); }
the
reinterpret_cast
seems not allowed and sayreinterpret_cast from 'const void *) to Dialog * casts away qualifiers
Any idea
-
Nick Strupat over 9 years
reinterpret_cast
can't cast away cv-qualifiers -
Ben Voigt over 9 years@Nick: The last
const
you put in there has no effect. -
templatetypedef over 9 yearsUm, why are you trying to get rid of the
const
here? That sounds unsafe.
-