こんにちわ、お世話になります。
現在、Windows XPにて、VC++6.0からVC++2005へと
あるソフトの移植をしているのですが、
CException についてコンパイルエラーが出ています。
試しに、
--
CException* pException = new CException;
delete pException;
--
の様な文を書いて、VC++6.0とVC++2005とでコンパイルを
比較してみました。
すると思惑通り、VC++2005でだけ、以下の様なエラーが
出てしまいます。
--
error C2259: 'CException' : 抽象クラスをインスタンス化できません。
1> 次のメンバが原因です:
1> 'CException::~CException(void)' : は抽象型です
--
ヘルプを見てもエラーが出るのは納得なのですが、
それならなぜVC++6.0の時には出なかったのでしょうか?
以上、よろしくお願い致します。
No.5
- 回答日時:
> 「newで直接作成しないでください。
」は 2001/10版のMSDNのドキュメントに記載されています
WEB版の方には記載はないようです
参考URL:http://msdn.microsoft.com/ja-jp/library/6eyf1ccs …
No.3
- 回答日時:
あ、それから、オブジェクトを削除方法について。
http://msdn.microsoft.com/ja-jp/library/97z4sxfb …
CException オブジェクトを削除するときは、Delete メンバ関数で例外を削除します。delete 演算子を直接呼び出さないでください。CException オブジェクトがグローバル オブジェクトであったり、スタック上に作成されていることがあるからです。
とあるので、deleteで削除せず、pException->Delete()とするべきです。
No.2
- 回答日時:
コンパイラのチェックが厳しくなったので顕在化したのでしょう
VC6でも CExceptionクラスを直接生成すべきでない旨の記述がMSDNにありますよ
MSDN CExceptionのコンストラクタより引用
このメンバ関数は CException オブジェクトを構築します。CException オブジェクトを new で直接作成しないでください。CException からクラスを派生したときはこのコンストラクタを使用してください。
この回答への補足
ありがとうございます。
やっぱり単純にコンパイラのチェックが厳しくなったと
思えばいいんでしょうかね。
となると、CException を基底クラスとしたものを作ってやって、
その中でオーバーライドしないと駄目でしょうか?
それとも、CMemoryException等 を使って
CMemoryException* pException = new CMemoryException;
としても問題ないものなのでしょうか?
単純な環境変化による移植なので、余り手を加えたくは
無いものですから。
ちなみに、引用されている文ですが、
「newで直接作成しないでください。」
ってのはどの辺に書かれてますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- 国産車 【日産自動車のVCターボエンジンは4WD動作を部品点数を減らした一体化したユニットにした 5 2023/05/26 23:00
- イヤホン・ヘッドホン・補聴器 pc vcについて ゲーミングヘッドホンでvcをやろうとしたのですが相手の声が聞こえるのですが、自分 2 2023/06/16 20:42
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- 国産車 【VCターボエンジン】を搭載している車種を教えてください。 1 2023/05/25 19:19
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
- オンラインゲーム ValorantってオープンVCないんですか? プッシュ・トゥ・トークしかない感じ? 1 2023/03/17 03:01
- メディア・マスコミ この記事の真偽は? ペットボトル茶は危険!発がん性の合成ビタミン大量含有 5 2022/07/01 21:35
- 工学 非対称三相交流について 2 2022/07/06 00:36
- その他(ゲーム) プレーステーション(PS5)のVCパーティーについて 1 2023/01/18 12:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワイルドカード<?>と型パラメー...
-
VBA 同じ名前のオブジェクトを...
-
BufferedWriterのcloseメソッド
-
パワーポイントのVBAでテキスト...
-
オブジェクトと関数の違い
-
COMコンポーネントって何?
-
C#でフォームのオブジェクト名...
-
Excelファイルをgrep検索したい
-
vb.net オブジェクト指向につい...
-
【Java】入力した西暦→和暦に変...
-
Excel VBA : イコールになら...
-
Error.prototype結果のd {name
-
オブジェクトを枠線に合わせる...
-
署名と検証
-
オブジェクト名をforループ内で...
-
多人数のじゃんけんプログラム
-
VBA 下記ソースについて質問で...
-
CFileDialogでフォルダだけを選...
-
EXCEL VBAにて動的にCheckBOXを...
-
これは名前空間ですか?それと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
vb.net オブジェクト指向につい...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
ビジュアルC++でボタンの有...
-
時間帯判定をする。
-
LISTBOXの内容が更新されま...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Vbで通常使用するプリンターを...
-
戻り値がクラスオブジェクト
-
VBAでvlookup関数から、別シー...
おすすめ情報