Niepoprawne błędy składni, nie można uzyskać dynamic_cast
typ nie-polimorficzny. static_cast
to rzutowanie, którego używałbyś w tym przypadku, jeśli wiesz, że jest to faktycznie obiekt typu celu.
Powód: static_cast
w zasadzie kompilator wykonuje test w czasie kompilacji "Czy dane wejściowe mogą być rzutowane na wyjście?" To może być używane w przypadkach, w których rzutujesz w dół lub w dół hierarchię wskaźników (lub odniesień). Ale sprawdzanie odbywa się tylko podczas kompilacji, a kompilator zakłada, że wiesz, co robisz.
dynamic_cast
może być używany tylko w przypadku wskaźnika lub odnośnika, a oprócz sprawdzenia czasu kompilacji wykonuje dodatkowe sprawdzenie, czy rzut jest legalny. Wymaga to, aby dana klasa posiadała co najmniej jedną wirtualną metodę, która pozwala kompilatorowi (jeśli obsługuje on RTTI) na przeprowadzenie dodatkowej kontroli. Jeśli jednak dany typ nie ma żadnych metod wirtualnych, nie można go użyć.
Najprostszym przypadkiem, a prawdopodobnie warto, jeśli podajesz wskaźniki podobne do tego, jest rozważenie uczynienia destruktora klasy podstawowej wirtualnym. Oprócz umożliwienia używania rzutowania dynamicznego pozwala również wywoływać odpowiednie destruktory po usunięciu wskaźnika klasy bazowej.
'a' nie jest wskaźnikiem. Czy tak to jest w twoim kodzie? – littleadv
Przepraszam, a jest w rzeczywistości wskaźnikiem. – wbarksdale
A czy czas kompilacji błędów lub czas wykonywania? Jeśli działa, to IMHO jest oczekiwanym zachowaniem. – littleadv