• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++のエラー)

VC++のエラーについて

このQ&Aのポイント
  • Windows XPのVC++ 6.0でコンパイル時にエラーが発生します。
  • エラーメッセージには、'WinMain'関数のオーバーロードに関する問題が指摘されています。
  • 正しい宣言を確認する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • mooncake
  • ベストアンサー率100% (6/6)
回答No.1

Win32 applicationを作成する場合は、インスタンス ハンドルの型はHINSTANCEになります。HANDLEはWin16アプリ の場合です。 HANDLEをHINSTANCEに書きかえればOKです。 > D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: > 'WinMain' : 関数はオーバーロードできません。 これはですね。 まず、VCではWinMain関数のオーバーロード(引数や戻り値が 違う同名の関数の複数定義)は禁止されています。 ソースにはWinMain関数を一つしか書いてないのに・・・と 思われるかもしれませんが、 > #include <windows.h> の行でヘッダーを読み込む事により、Win32用のWinMain 関数のプロトタイプ(前宣言)が読み込まれているんですよ。 ヘッダーをたどってみればわかりますが、 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); といった風になっています。ここで、引数の型に注目して 下さい。HINSTANCEになっていますよね。 なのでarcsinさんが打ち込んだ、 > int WINAPI WinMain( HANDLE hInstance , > HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) > { は引数の型が違うから、別の同名の関数を新たに定義しようと している事(オーバーロード)になり、WinMain関数はオーバー ロードできませんよ!ってコンパイラに注意されてしまう訳です。 ところで、参考にされているHPの他のページにこれに関して 書かれてましたのでとりあえず目を通しておくといいですよ。 (場所がわかりにくいかもしれないですが、参考URLのページの 一番下辺りです)

参考URL:
http://www.kumei.ne.jp/c_lang/setvc.htm
arcsin
質問者

お礼

わかりやすい解説ありがとうございました。 解決しました^^