的成员,我在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