C++の勉強をしています。
参考書を元に以下のようなコードを書き、実行したところエラーが発生しました。
原因が分かる方がいれば教えて頂けないでしょうか?
よろしくお願いします。
[環境]
Windows XP
Visual Stadio .NET
----------------コード-------------------
#include "stdafx.h"
#include "test.h"
#include <stdio.h>
#include <string>
#include <vector>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一のアプリケーション オブジェクトです。
CWinApp theApp;
using namespace std;
class W1
{
public:
virtual int GetData() {return 10;}
};
class W2 :public W1
{
public:
int GetData() {return 100;}
};
void update(W2 *p)
{
if (p == NULL) return;
int iData = 0;
iData = p->GetData();
printf("%d\n", iData);
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
W2 w2;
W1 *pw = &w2;
int iData = 0;
iData = pw->GetData();
//Cスタイルのキャスト。
//ここでは問題なし。
update((W2*)pw);
//C++スタイルでのキャスト
//この関数の中に入ろうと
//とすると、エラーになる。
update(dynamic_cast<W2*>(pw));
return 0;
}
-----------------------------------------------------
[エラー内容]
test.exe の 0x7c812a5b でハンドルされていない例外が発生しました : Microsoft C++ exception: __non_rtti_object @ 0x0012fe18。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
# CWinApp theApp;があるのに、_tmainもある?
その版のVCでは、デフォルトのプロジェクト設定でRTTIがOFFになっていて、
その状態でdynamic_cast等を使ってはいけないのですが、
ちゃんと"GR"の設定変更してますか。
# C言語スタイルのキャストは何も考えずに無理矢理変換するだけなので、
# このオプションは無関係です。
また、MSDN(マニュアル)も見てますか。__non_rtti_objectの説明があります。
> なにゆえ update の引数を W2* にしているのしょうか?
同感です。
参考URL:http://msdn2.microsoft.com/en-us/library/cby9kyc …
No.1
- 回答日時:
コンソールアプリケーションにして、もう少しコードを最小限に絞ったらどうでしょう。
このコードのままでもエラーにはならないような気がします。
それにしても、GetData() を virtual 宣言しているのになにゆえ update の引数を W2* にしているのしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラーが出ているのですが...
-
C言語のエラーを修正したい
-
_tcscat がうまくいきません(V...
-
組み合わせと順列 アルゴリズム
-
JPEGやPNGが読めるLoadImage関数
-
vectorのイテレータを大小比較...
-
#include "fstream.h"
-
空ENTERの判別
-
VC++で文字列から任意の文字を...
-
C++でShowCursorを使いたい。
-
なぜ、C++の標準ヘッダをインク...
-
CStringとString
-
2÷3などの余りについて
-
Enterキーを押されたら次の処理...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語を実行すると-infが出てき...
-
std::set<int> で、ある値が何...
-
Aの値からBの値を除するとは??
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
C言語 ストリームについて。
-
switch文のエラーについて
-
string型のフォーマット書式指...
-
構文エラーが出ているのですが...
-
空ENTERの判別
-
gccでコンパイル時のエラー
-
なぜ、C++の標準ヘッダをインク...
-
リモートデスクトップの接続元I...
-
JPEGやPNGが読めるLoadImage関数
-
mapの初期化
-
snprintfが使用できない。
-
atlbase.h と afxwin.hの同時定義
-
C言語のエラーを修正したい
-
CSting を TCHAR [] に変換した...
-
#include "fstream.h"
-
構造体配列のvectorへの変換と...
-
【C++】ヘッダ内でstringを格納...
-
CStringとString
おすすめ情報