重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

雑誌に載っているソースファイルの
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow
) {
WNDCLASS wc;
MSG msg;

wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc= WindowProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInstance;
wc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
wc.hCursor= LoadCursor(NULL , IDC_ARROW);
ここ →wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName= NULL;
wc.lpszClassName= APP_NAME;

ここのところでerror C2440: '=' : 'void *' から 'struct HBRUSH__ *' に変換することはできません。(新しい動作 ; ヘルプを参照)
'void*' から非 'void' 型への変換には明示的なキャストが必要です。とエラーがでてしまいます。なにぶん初心者なものでエラーの意味が分かりません。教えていただけたら嬉しいです。

A 回答 (3件)

CのプログラムをC++でコンパイルしようとしているとか。

    • good
    • 0
この回答へのお礼

回答のとうりでした。C言語でコンパイルしたら作動しました。
本当に困っていたのでありがとうございました。

お礼日時:2008/05/13 09:55

hbrBackground は HBRUSH(HBRUSH__ *)型の変数です。


そこに GetStockObject( )関数の戻り値である HGDIOBJ(void *)型の値を代入しているので型が違うというエラーが出ています。
以前はコンパイラが自動的に型を変換していたのでエラーにならなかったのでしょう。
新しいコンパイラでは
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
又は
wc.hbrBackground = (HBRUSH__*)GetStockObject(WHITE_BRUSH);
のように手動で明示的に型を変換(キャストという)しないといけません。
    • good
    • 0
この回答へのお礼

非常に参考になりました。本当に困っていたのでありがとうございました。非常に分かりやすい説明です。ありがとうございました。

お礼日時:2008/05/13 09:58

コンパイラのチェックが厳しくなっているのでしょう



wc.hbrBackground = (HBRUSH*)GetStockObject(WHITE_BRUSH);
といった具合に キャストしてやればいいと思いますよ
    • good
    • 0

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