- ベストアンサー
初歩的なことかもしれないのですが
最近Cの勉強を始めました。 [visual C++ 2008]を使用しています。 文字列の勉強をしていて参考書の例題を打ちました。 下のが打ち込んだプログラムの一部です。 #include<math.h> #include<stdio.h> #include<string.h> void wait(int tm) { int i, j; for(i = 1; i < tm; i++) for(j = 1; j < tm; j++){ double x = sin(i)*cos(j); } } ビルドを行った際に error C2668: 'sin' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) error C2668: 'cos' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 例題と何度も見比べたのですが、写し間違いはなく何度打ちなおしても同様のエラーが出てしまいます。 解決法を教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「オーバロード関数」は似て非なる言語C++の機能で、Cにはありません。 C言語ではなくC++としてコンパイルしてるような気もします。 プロジェクトのプロパティ詳細「コンパイル言語の選択」は どうなっていますか。 「C++として…」を「Cとして…」にしたらどうなりますか。
その他の回答 (3)
- jacta
- ベストアンサー率26% (845/3158)
C++のままで問題を解決するのであれば、 double x = sin(static_cast<double>(i))*cos(static_cast<double>(j)); のようにdouble(またはfloatまたはlong double)でキャストしてください。 C++のsinやcosは、float版、double版、long double版が多重定義(オーバーロード)されていますので、int型の実引数を与えるとどれを選べばよいのかコンパイラが分からなくなります。
お礼
回答ありがとうございます。 無事コンパイルできました。
- Tacosan
- ベストアンサー率23% (3656/15482)
#2 の通りです. C++ としてコンパイルされてます.
お礼
回答ありがとうございます。 無事コンパイルできました。
- koko_u_u
- ベストアンサー率18% (216/1139)
math.h で定義されている sin() 関数のプロトタイプ宣言を確認すれば解決すると思います。
お礼
回答ありがとうございます。 無事コンパイルできました。
お礼
回答ありがとうございます。 ご指摘通りやったらコンパイルできました。 ありがとうございました。