dポイントプレゼントキャンペーン実施中!

 解決方法が分からないのでここで質問することにしました。
typeid演算子を使っていて途中から、警告されるのですが、無視してデバックを行うと途中からERRORになり、中断しました。
 警告内容は、
(warning C4541: 'typeid' が /GR- を使用したポリモーフィック型 'Kitty' で使用されています; 動作結果は保証されません。)
というもので、まず下記のソースを読んでもらいたいのですが

#include<iostream>
#include<typeinfo>
using namespace std;

class Kitty {
public:
virtual void func() {} ;
} obj1;

class Chobits : public Kitty {
public:
void func() {}
} obj2 ;

int main() {
Kitty *po = &obj1;
cout << "Class type = " << typeid (*po).name() << '\n';
po = &obj2;
cout << "Class type = " << typeid (*po).name() << '\n';
return 0;
}
のmain()内のtypeid演算子が原因のようなのですが、解決方法がよく分かりません。プラットフォームはVS.NET2003でC++で記述しています。

ちなみにERROR内容は、sample55.exe の 0x7c812aeb でハンドルされていない例外が発生しました : Microsoft C++ exception: __non_rtti_object @ 0x0013fdb4。というものです。
 

A 回答 (2件)

C4541でgoogle検索したら一発で見つかりましたよ。


http://msdn.microsoft.com/ja-jp/library/8kyye6db …

コンパイルオプションに/GRをつけてください、ってことで。
    • good
    • 0
この回答へのお礼

 プロパティで設定を変更したらできました。ありがとうございます。
googleでの検索方法が悪かったんですね^^;
type演算子だと解説しているのがなかったので。
.NET2003だから対応されていなんですね。

お礼日時:2008/11/15 22:31

 こんばんは。



 typeid()やdynamic_cast<T>等は、RTTI(GRオプション)が有効に成っていないと使用出来ません。
 VS.NET2003の何処かにRTTIを有効にするチェックボックス等が有る筈です。
 見つけて、其処にチェックを入れて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!