オーバーロード関数とは何?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
APS

オーバーロード関数とは何?

#1

投稿記事 by APS » 16年前

プログラミングの館のボムを打ってみようという所をやっているのですが、

c:\documents and settings\aps\デスクトップ\project\1章ver2.1\mydat\source\effect.cpp(27) : error C2668: 'cos' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
c:\program files\microsoft visual studio 9.0\vc\include\math.h(551): 'long double cos(long double)' の可能性があります。
c:\program files\microsoft visual studio 9.0\vc\include\math.h(503): または 'float cos(float)'
c:\program files\microsoft visual studio 9.0\vc\include\math.h(116): または 'double cos(double)'
引数リスト '(int)' を一致させようとしているとき

というエラーが出るのですが、これはどういう事を意味しているのでしょうか?

エラーに詳しい方お願いします。

Justy

Re:オーバーロード関数とは何?

#2

投稿記事 by Justy » 16年前


>これはどういう事を意味しているのでしょうか

 C++のオーバーロード関数絡みのエラーですね。
 
C++ - オーバーロード
ttp://www.booran.com/menu/cplus/overload.html


 コンパイラとしては cos(float)と cos(double)と cos(long double)の
3つの別々の関数の存在を認識しているけどユーザーが書いたコードから
そのどれを呼び出せばいいのか判らない状態にあります。

 多分、こんな感じで書いていませんか?

[color=#d0d0ff" face="monospace]
int v = 1;
cos(v);
[/color]

とか
[color=#d0d0ff" face="monospace]
cos(1)
[/color]

とか。

 こういう場合、明示的に floatとか doubleか、long doubleにキャストするか、
定数なら .f .0を付けたりして引数となる型を明確にしてあげて下さい。
[color=#d0d0ff" face="monospace]
cos((double)v);
cos(1.f)
cos(5.0)
[/color]


 あるいは float版でよければ cosf関数を、long doubleなら cosl関数を
使ってもいいですね。

APS

Re:オーバーロード関数とは何?

#3

投稿記事 by APS » 16年前

詳しい解説ありがとうございます。
おかげでエラーを吐かなくすることができました。

閉鎖

“C言語何でも質問掲示板” へ戻る