的成員,我在linux編譯我的程序 - 它具有以下行:「開方」不是「性病」
std::sqrt((double)num);
在Windows上是好的,但在linux上我得到「開方」不是'std'的成員 我有一個包含數學題.h
它有什麼問題?
的成員,我在linux編譯我的程序 - 它具有以下行:「開方」不是「性病」
std::sqrt((double)num);
在Windows上是好的,但在linux上我得到「開方」不是'std'的成員 我有一個包含數學題.h
它有什麼問題?
將指令更改爲#include <cmath>
。 <cxxxxxxx>
形式的C++頭文件保證在std
名稱空間中具有標準名稱(並且可以選擇性地在全局名稱空間中提供它們)。 <xxxxxx.h>
不是。
這是因爲<math.h>
沒有在namespace std
中聲明函數。僅出於兼容性原因,它已包含在C++標準中。正確的C++包括<cmath>
。
§D.5,2
每個C頭,其每一個具有形式
name.h
的名稱,行爲如同由相應的cname
頭放置在標準庫名稱空間的每個名稱是放置在全局命名空間範圍內。未指定這些名稱是首先在名稱空間std
的名稱空間範圍內聲明或定義的,然後通過使用聲明以顯式注入全局名稱空間範圍。
你的代碼在windows下工作是純粹的運氣 - 如果你想這樣調用它的話。最後一句提示了在windows下可能會發生什麼,但不是在linux下:在windows下,顯然這些名字在全局命名空間和命名空間std
中都是有效的。
'
@JamesKanze感謝您的糾正,我不知道這一點。我改變了我的答案。 – 2013-05-13 09:20:14
您是否包含''? –
juanchopanza
2013-05-13 09:00:30
'#include',根據http://en.cppreference.com/w/cpp/numeric/math/sqrt –
hmjd
2013-05-13 09:00:32