попробуйте вместо этого static_cast. VC генерирует ошибку, если вы пытаетесь использовать чрезмерно разрешающую приведение (например, использование reinterpret_cast, когда будет достаточно static_cast или const_cast).
В C ++ есть 5 типов приведений, каждый из которых позволяет вам делать больше (предоставляет больше разрешений). Наименее допустимыми являются броски констант (const_cast<int>(<const int>)
), которые позволяют изменять модификатор констант. Существуют статические приведения (static_cast<int>)(<short>)
), которые позволяют выполнять безопасные приведения типов (например, приведение к производному). Существуют динамические приведения (dynamic_cast<derived_type>(base_type)
, которые позволяют приводить из одного типа в другой , если существует законное преобразование между двумя (и которые возвращают ноль, если нет преобразования). Наконец, есть преобразования, которые позволяют преобразование между несвязанными типами - reinterpret_cast reinterpret_cast<int>(<void *>)
и приведение в стиле C (int)<void *>
.
У меня нет хорошего способа описания этих различных типов приведения, поэтому я описываю их как «более разрешающие», потому что каждый из них позволяет вам делать больше.
VC предупреждает вас, если вы используете переосмысление приведения, когда один из других типов приведения будет более подходящим для достижения вашей цели. Приведения в стиле C не имеют аналогичного предупреждения для обратной совместимости.