- ベストアンサー
不明なエラー | C言語プログラミングの独習中
- C言語プログラミングの独習中に不明なエラーが発生しました。
- 発生したエラーの原因がわからず、解決方法を模索しています。
- エラー内容とコードを記載し、アドバイスをいただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ソースコードの検証をしてないので当てずっぽうですが 0の代わりにNULLとしてみたらどうでしょう。 NULLはポインタが何も指していない状態です。 (ちなみにHINSTANCEはvoid*やint*と同じようにポインタ) VisualStudioだと0もNULLも一緒なんですが、MinGWでは0とNULLを区別しているのでは?
その他の回答 (2)
- Yanch
- ベストアンサー率50% (114/225)
MinGW でWindowsアプリケーションをコンパイルする場合に、 GetStockObjectが見つからないなら、 「-mwindows」オプションを指定してみると良いかも。 C:\source2\c11>g++ -Wall template01.cpp -mwindows のような感じです。
お礼
ご回答ありがとうございます! 「-mwindows」オプション指定で見事に 「GetStockObject」が見つからないエラーはなくなりました。 オプション指定の意味もぐっと理解が深まりました! ありがとうございます。 「 warning: cast from pointer to integer of different size」 の方が未だ未解決ですが、いろいろ試行錯誤してみたいと思います。 ひとまずお礼まで。。
- magicalpass
- ベストアンサー率58% (378/648)
> C:\source2\c11>g++ -Wall template01.cpp > template01.cpp: In function `ATOM InitApp(HINSTANCE__*)': > template01.cpp:45: warning: cast from pointer to integer of different size > template01.cpp:51: warning: cast from pointer to integer of different size > template01.cpp:59: warning: cast from pointer to integer of different size これはコンパイラがtemplate01.cppをコンパイルしたら関数InitApp()で3つのwarningがあったということです。 行番号の確認が取れないので分かりませんが、おそらくこの3つのwarningはLoadImageの第1引数がNULLで書かれているために出ているものと思われます。(HINSTANCE)でキャストすれば良いのではないでしょうか。 もっとも、エラーの本体はこれではありません。 > C:\Users\****\AppData\Local\Temp/ccgXbaaa.o(.text+0x14f):template01.cpp: undefin ed reference to `GetStockObject@4' これはリンク時に「GetStockObject@4」というシンボル名が見つからないというエラーが出ているようですね。関数GetStockObject()の実体が無いということです。コンパイル時のリンクオプションで該当するライブラリが指定されていないということです。
お礼
分かりやすい解説ありがとうございました。 正直まだ知識が追い付いていませんが、 何がわからないかが見えただけでも大きな進歩です。 今後も何度も見返して確認しながら学びたいと思います。 ホントにうれしいです。 ありがとうございました!
補足
質問を重ねて申し訳ないのですが、 warning: cast from pointer to integer of different size のエラーが改善しません。 以下試してみましたが、LoadImageを3つとも (HINSTANCE)でキャストしてみましたが 以下のエラーが出てしまいました。 template01.cpp:55: error: cannot convert `HINSTANCE__*' to `HICON__*' in assignment もしよろしければアドバイスお願いします。 完全理解までは遠いですが、おかげさまで 「これをわかるためにはこれが」 「これをわかるためにはこれが」と芋づる式に 理解が深まりました。 考えるより手を動かすのがやっぱりいいみたいですね! 質問してよかったです。 それぞれのアドバイスの意味が分かるよう 復習に勤しみます。本当にありがとうございました。 再質問が再びお目に留まるかもしれませんので、 しばらく締め切らずに置いておきたいと思います。
お礼
お礼が大変遅くなってしまいました。 実は試してみましたが、残念ながらうまくいきませんでした。 しかし、大変参考になっております。 もう少しレベルアップしたのちに改めて試してみたいと思います。 ありがとうございました。