アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近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' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)

例題と何度も見比べたのですが、写し間違いはなく何度打ちなおしても同様のエラーが出てしまいます。
解決法を教えていただけないでしょうか。

A 回答 (4件)

「オーバロード関数」は似て非なる言語C++の機能で、Cにはありません。


C言語ではなくC++としてコンパイルしてるような気もします。

プロジェクトのプロパティ詳細「コンパイル言語の選択」は
どうなっていますか。
「C++として…」を「Cとして…」にしたらどうなりますか。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/01/09 10:31

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

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

お礼日時:2009/01/09 10:33

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/09 10:32

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/09 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!