Приведение не является типом указателя при понижении - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть базовый класс:

class Base{
   public:
      Base();
      virtual ~Base();
      .....
}

class Derived2: public Base{
    public:
       Derived2();
       ...
}

, и в своем основном я пытался динамически c привести повышение :: shared_ptr из базы в производный2:

  testFunction(boost:shared_ptr<Base> base){
     Derived2*  derived2 = dynamic_cast<Derived2*>(base);
}

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Повышение имеет dynamic_pointer_cast:

boost::shared_ptr<Derived2> derived2 = boost::dynamic_pointer_cast<Derived2>(base);
0 голосов
/ 02 апреля 2020

Операнд dynamic_cast не является указателем типа

как я могу это исправить?

Не используя не указатель введите в качестве операнда dynamic_cast. Другими словами, используя тип указателя в качестве операнда.

Вы можете получить указатель из общего указателя, используя get функцию-член.

Будьте осторожны, чтобы не допустить утечки этого пустого указателя выйти за рамки функции. Вы можете доверять его действительности только до тех пор, пока аргумент base указывает на объект. Также не пытайтесь завладеть этим голым указателем, так как его владение уже является общим.


PS std::shared_ptr находится в стандартной библиотеке с C ++ 11.

PPS dynamic_cast - это кодовый запах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...