main.cpp(32) : error C2668: 'cos' : オーバーロード関数の呼び出しを解決することができません。

main.cpp(32) : 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)' を一致させようとしているとき

一瞬、#include<math.h>が書いてあることを確認して、コンパイル時の引数に-lmを追加したくなるが、そうではなさそうだ。オーバーロード関数の呼び出しを解決することができません。とある。そもそもVC++ならmath関係の関数は使える。

main.cppの32行目のソースコードは以下。
 pt0.x = int (cos (0) * size / 4 * scale + size / 2);

オーバーロードとは、C++から使えるようになった。関数の多態性。
over load
例、
int abc(int x);
int abc(int x,int y);
int abc(double x);
C++では、引数の数と引数の型が違うを同じ関数名でも定義できる。
このエラーは、オーバーロードしている関数の呼び出しを解決することができません。というのは引数が違うcos関数がいくつかあるがどのcos関数を呼び出せばいいか「あいまい」だということ。
よって、引数の型を明示してやればよい。エラーでは、'long double cos(long double)' の可能性があります。となっているので以下のように型を特定(キャスト)してやるとよい。
 pt0.x = int (cos (0) * size / 4 * scale + size / 2);
                   ↓
 pt0.x = int (cos ((long double)0) * size / 4 * scale + size / 2);
0をlong double型にしてやればOK
「今日の訪問数: -
「昨日の訪問数: -
「今までの訪問数: -
名前:
コメント:
最終更新:2010年02月05日 12:30
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。