• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SetPixel関数のmath.h)

SetPixel関数で円を描くプログラムでコンパイルエラーが発生する

このQ&Aのポイント
  • WindowsXPのノートでVisualC++2008ExpressEditionを使ってSetPixel関数で円を描くプログラムを作成しています。しかし、math.hの問題によりコンパイルエラーが発生しています。
  • 具体的には、96行目と98行目で'pow'関数のオーバーロードの解決に失敗しており、math.hを編集する必要があるかどうか検討しています。
  • 質問の内容を理解してくれる方に助言をいただきたいです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

そのエラーに書いてある通りです。 C++では、同じ関数名でも、引数の型や数によって、違う関数として定義できる機能があります。(オーバーロードといいます) Cでは、powは pow(double,double)だけであって、どんな型を指定しても、doubleに型変換してくれました。 しかし、C++では http://msdn.microsoft.com/ja-jp/library/dt5dakze.aspx これだけありますが、メッセージにあるように、 pow(int , int) と定義されているものはありません。第2引数がintのものがありますが、第1引数が3通りあり、intをどれに変換してよいのか、判断できないのです。 対処法としては ・第1引数をキャストして、曖昧さをなくす 例: pow( static_cast<double>(r), 2) // 第1引数がdoubleになるので、 double pow(double,int)が選ばれる ・第2引数をdoubleにして、候補を1つにする 例: pow(r, 2.0) // 第2引数がdoubleになるので、 double pow(double,double)しか候補がない ・二乗くらいなら、pow関数なんて使わない。 例: r*r なお、gcc の -lm は、リンクの際にライブラリ(libm)をリンクするように指定するものです。今回のエラーはその前のコンパイルの段階で発生するものなので、 -lm 相当のことをしても無意味です。

REINBOW01
質問者

お礼

ありがとうございます。第二因数をdouble型にしたら解決しました。 pow関数ですか~知らなかったです。 プログラム初心者なので、本に書いてあることも殆ど理解できずサンプルを打ってコンパイルすることばかりやってます。C++は習ったことがなかったので、色々Cと違うんでしょうね。 この先も本の通りやってもコンパイルできないことがよく起こるのかもしれないと思うとちょっと不安です。すみません、また質問することもあるかと思いますがよろしくお願いします。

その他の回答 (1)

noname#137556
noname#137556
回答No.2

老婆心ながら・・・ Ellipse という楕円を描く関数があります。もちろん円も描けます。 http://msdn.microsoft.com/ja-jp/library/cc428585.aspx # SetPixel を使うにしても,もう少しうまくやらないと,場所によって隙間が開いてしまう。

REINBOW01
質問者

補足

申し遅れましたが、猫でもわかるゲームプログラミングって本の例題なんですよ。 横が掠れた円を、点を打って描くというプログラムのようです。 Ellipseも後のプログラムで出てきてました。

関連するQ&A