У меня есть для каждого цикла, который итерации над вектором указателей. указатели относятся к базовому классу. В каждом цикле я использую производный тип как тип итератора. Функция рендеринга определена только в некоторых из производных классов, но код компилируется и запускается ... Он сбрасывается, если вектор содержит указатель на производный объект, который не имеет функции рендеринга (очевидно).C++ для каждого, скрытый тип cast
for each (DerivedClass* body in myVector)
{
body->render();
}
Эта ошибка возникла в моем коде, потому что, когда я писал это вектор содержал только указатели на производный класс, но потом я решил реорганизовать код, и это изменилось.
Может ли кто-нибудь сказать мне правильный способ поймать эту ошибку? Проверка нулевого указателя не работает.
Вы уверены, что это C++? – SU3
@ SU3, это более старый синтаксис MSVC, устаревший с тех пор, как они поддерживали стандартные диапазоны для циклов. – chris
Похоже, что это просто 'static_cast' под капотом, поэтому вы не можете проверить posteriori. Как насчет итерации с помощью «BaseClass *» и downcasting вручную с помощью 'dynamic_cast'? – Quentin