• 締切済み

sqrt

int sroot(int i){ return (int) sqrt((double)i); } なんですが、このdoubleをintに変えたらコンパイルエラーになりました。return (int)はdoubleじゃないのに、sqrt((double)i)は何故doubleじゃないとコンパイル出来ないのかが分かりません。お願いします。

みんなの回答

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

C++でコンパイルしようとしていませんか? C++の場合、sqrt(厳密にはstd::sqrt)はdouble版以外に、float版、long double版、std::compleクラステンプレート版が多重定義されています。 実引数がint型の場合、多重定義の解決があいまいになるためコンパイルできません。

20081217
質問者

お礼

クラステンプレート版??わからないOTL調べてきます

20081217
質問者

補足

C++でコンパイルしようとしてました

noname#77845
noname#77845
回答No.1

sqrt関数の元々の定義が double sqrt( double 数値 ); だからでしょう? 因みに、こういう質問をするときは、 ・処理系 ・エラーメッセージ を記載した方が正しい回答を得られますよ。

20081217
質問者

お礼

ありがとうございます。次からそうしたいと思います。

関連するQ&A