2011-03-27 68 views
0

VS2010下面的代碼片段有什麼問題不會編譯它?#include <cmath>

int m = sqrt(n); 

(我試圖確定一個整數是否爲素數...)

+0

沒有足夠的信息來決定爲什麼你顯示的代碼不能編譯。你會得到什麼錯誤信息? – 2011-03-27 16:39:13

+0

我得到:錯誤C2668:'sqrt':對重載函數的模糊調用 – Joshua 2011-03-27 16:40:58

+0

聽起來像'n'是錯誤的類型。看看@ Erik的回答。 – 2011-03-27 16:41:30

回答

5

你需要一個特定的浮點類型傳遞給sqrt - 有沒有整數超載。使用e.g:

long double m = sqrt(static_cast<long double>(n)); 

正如你包括cmath沒有math.h我假設你想要C++。對於C,你需要使用如:

double m = sqrt((double) n); 

你得到根本的錯誤意味着編譯器不能自動選擇一個sqrt功能,爲你 - 你傳遞需要被轉換爲浮點類型的整數,編譯器不知道應該選擇哪種浮點類型和sqrt函數。