※ ChatGPTを利用し、要約された質問です(原文:SetPixel関数のmath.h)
SetPixel関数で円を描くプログラムでコンパイルエラーが発生する
このQ&Aのポイント
WindowsXPのノートでVisualC++2008ExpressEditionを使ってSetPixel関数で円を描くプログラムを作成しています。しかし、math.hの問題によりコンパイルエラーが発生しています。
具体的には、96行目と98行目で'pow'関数のオーバーロードの解決に失敗しており、math.hを編集する必要があるかどうか検討しています。
質問の内容を理解してくれる方に助言をいただきたいです。
WindowsXPのノートでVisualC++2008ExpressEditionを使っています。
SetPixel関数で円を描くプログラムで、math.hの問題だと思われる4つのエラーでコンパイルできません。
宣言は
#include<windows.h>
#include<math.h>
ウィンドウプロシージャ内で
switch (msg) {
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
for (i = a - r;i <= a + r; i++) {
x = i;
y = (int)sqrt(pow(r, 2) - pow(x - a, 2)) + b;←96行目
SetPixel(hdc, x, y, RGB(0, 0, 0));
y = (int)-sqrt(pow(r, 2) - pow(x - a, 2)) + b;←98行目
1>c:\documents and settings\REI\my documents\visual studio 2008\projects\setpixel01\setpixel01\setpixel01.cpp(96) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): 'long double pow(long double,int)' の可能性があります。
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): または 'float pow(float,int)'
1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): または 'double pow(double,int)'
1> 引数リスト '(int, int)' を一致させようとしているとき
同じ内容のエラーが96行目なのが2回、98行目なのが2回出ます。math.hを編集すればいいんでしょうか?gccならコマンドラインから-lmでいいかもしれないんですが。自分の入力ミスはないと思います。
どなたかお分かりになる方、教えていただけないでしょうかm(_ _)m
お礼
ありがとうございます。第二因数をdouble型にしたら解決しました。 pow関数ですか~知らなかったです。 プログラム初心者なので、本に書いてあることも殆ど理解できずサンプルを打ってコンパイルすることばかりやってます。C++は習ったことがなかったので、色々Cと違うんでしょうね。 この先も本の通りやってもコンパイルできないことがよく起こるのかもしれないと思うとちょっと不安です。すみません、また質問することもあるかと思いますがよろしくお願いします。