• ベストアンサー

初歩的なことかもしれないのですが

最近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' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 例題と何度も見比べたのですが、写し間違いはなく何度打ちなおしても同様のエラーが出てしまいます。 解決法を教えていただけないでしょうか。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

「オーバロード関数」は似て非なる言語C++の機能で、Cにはありません。 C言語ではなくC++としてコンパイルしてるような気もします。 プロジェクトのプロパティ詳細「コンパイル言語の選択」は どうなっていますか。 「C++として…」を「Cとして…」にしたらどうなりますか。

syamusuke
質問者

お礼

回答ありがとうございます。 ご指摘通りやったらコンパイルできました。 ありがとうございました。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

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型の実引数を与えるとどれを選べばよいのかコンパイラが分からなくなります。

syamusuke
質問者

お礼

回答ありがとうございます。 無事コンパイルできました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#2 の通りです. C++ としてコンパイルされてます.

syamusuke
質問者

お礼

回答ありがとうございます。 無事コンパイルできました。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

math.h で定義されている sin() 関数のプロトタイプ宣言を確認すれば解決すると思います。

syamusuke
質問者

お礼

回答ありがとうございます。 無事コンパイルできました。

関連するQ&A