私は、ポインタのベクトルを反復する各ループに対してaを持っています。ポインタは基本クラスへのポインタです。 for eachループでは、派生型をイテレータの型として使用します。レンダリング関数は派生クラスのいくつかでのみ定義されていますが、コードはコンパイルされて実行されます...ベクトルにレンダリング関数を持たない派生オブジェクトへのポインタが含まれているとクラッシュします。私はそれを書いたとき、ベクトルのみ派生クラスへのポインタが含まれていたが、後に、私はコードをリファクタリングすることを決定し、これが変更されたため、このエラーは私のコードでは、約来たそれぞれの隠し型キャストのためのC++
for each (DerivedClass* body in myVector)
{
body->render();
}
。
誰も私にこのエラーをトラップする正しい方法を教えてもらえますか?ヌルポインタのチェックが機能していないようです。
これはC++であると確信していますか? – SU3
@ SU3は、標準の範囲ベースのforループをサポートして以来、廃止されている古いMSVC構文です。 – chris
それは、ボンネットの下で 'static_cast'を実行するようなサウンドなので、事後確認はできません。 'BaseClass * 'で反復処理し、' dynamic_cast'で手動でダウンキャストする方法はありますか? – Quentin