Вы можете поверхностно «исправить» это с помощью двухступенчатого приведения.Например,
static_cast<PointSelector2D *>(static_cast<InteractorStyleCamera *>(o));
Конечно, вы должны иметь в виду, что это «исправляет» синтаксис, но не устраняет основную структурную проблему.Ваш PointSelector2D
содержит два базовых подобъекта InteractorStyle
.В зависимости от того, с каких InteractorStyle
базовых подобъектов вы запускаете, путь восходящего потока может отличатьсяИ очень важно выбрать правильный путь.То, что я написал выше, предназначено для InteractorStyle
внутри InteractorStyleCamera
.Для другой базы правильный upcast будет
static_cast<PointSelector2D *>(static_cast<PointSelector *>(o));
Если вам только что дали указатель InteractorStyle *
без дополнительной информации о том, на какую базу он указывает, то вы не сможете решить вашу проблему с помощьюstatic_cast
.Там нет никакого способа узнать, какой путь upcast принять.Выбор неправильного приведет к совершенно бессмысленному результату.
Как уже отмечалось, dynamic_cast
может помочь в этой ситуации, но к нему предъявляются дополнительные требования (полиморфный тип запуска).Ваши типы не являются полиморфными (по крайней мере, в приведенном вами примере), поэтому dynamic_cast
не будет принимать их для откликов.