For both dynamic_cast
and typeid
to work, your compiler must enable Run-Time Type Information (RTTI). Borland C++ Builder has this capability enabled by default, but in Microsoft Visual C++ you’ll need to turn it on overtly. See Appendix C “Microsoft Visual C++” for details on how this is done. You’ll also need to include the header file TYPEINFO
.
Чтобы заработали dynamic_cast
и typeid
, компилятор должен активизировать механизм, который позволяет определять и изменять тип объекта во время выполнения программы — RTTI (Run-Time Type Information). В системе Borland С++ Builder этот механизм включается по умолчанию, а в Microsoft Visual C++ нужно подключать его вручную. Также необходимо включить в программу заголовочный файл TYPEINFO
.
В среде «Visual Studio Community 2017», кстати, механизм RTTI включен по умолчанию. А вообще он включается и выключается ключом компилятора
/GR
:https://docs.microsoft.com/en-us/cpp/build/reference/gr-enable-run-time-type-information
До этой настройки можно добраться через свойства проекта: пункт главного меню «Проект — Свойства». В левой части открывшегося окна в меню «Свойства конфигурации» следует выбрать ветку «C/C++», в ней — ветку «Язык». Тогда в правой части окна станут видны свойства ветки «Язык», в том числе свойство «Включить информацию о типах времени выполнения», с помощью которого можно выключить или выключить RTTI.
Перевод названия свойства, конечно, ужасный. Можно понять так, что у «времени выполнения программы» есть какие-то типы. Нормальный перевод — «Включить RTTI» (кому это нужно, те знают расшифровку этой аббревиатуры) или, на крайний случай, «Включить динамическую идентификацию типов данных» (так называется статья в википедии, посвященная RTTI).