"round"不是"std"的成员
'round' is not a member of 'std'
我正在尝试编译以下代码:
#include <cmath>
double gravity (double level) {
return 0.02 * std::round(level);
}
但GCC告诉我:
error: 'round' is not a member of 'std'
我知道我以前在ISO C++98中多次使用round
函数。不同寻常的是,round
和::round
都能工作。
什么东西?
更新:我使用g++ -std=c++98 -Wall -pedantic
进行编译。切换到std=c++0x
工作。
但是,如果std::round
不起作用,为什么不合格/匿名的round
和::round
都起作用?
std::round
函数是C++11,因此您需要使用C++11或启用更新的标准进行编译。
我做了一些研究,以下是我的发现:
round
在ISO C++11中定义,因为它包含ISO C99标准库。
round
不是ISO C++98的一部分,后者使用ISO C90标准库。
这就是为什么它不在C++98的命名空间std
中。
但是g++
(错误地)包含了C99标头,即使使用-std=c++98 -pedantic
编译,也会禁用所有非标准内容:
GNU_SOURCE由G++和。。。这意味着_USE_ISOC99
(来自http://gcc.gnu.org/ml/gcc/2002-09/msg00580.html)
这就是::round
工作的原因。
这显然是GCC中的一个错误:为什么GCC允许在C++中使用round(),即使带有ansi和pedantic标志?
其他C++编译器可能不提供round
函数(因为标准不需要它),所以我应该定义自己的函数。
怎么样
float myRoundFunc(float toRound)
{
return std::ceil(toRound - 0.5);
}
这样就没有可比性,它会适当地取整。
旧主题,但可能对在谷歌中搜索的主题有用:
//TODO: C++11 got round() function defined in math.h
float distance = sqrt((float)(plus_x * plus_x + plus_y * plus_y));
if (distance >= floor(distance)+0.5) distance = ceil(distance);
else distance = floor(distance);
在C++03标准中,标准C库的规范性参考是ISO/IEC 9899:1990(C90),不包括round
函数。在C++11中,它是ISO/IEC 9899:1999(C99),包含了round
函数。
每个C++标准中<cmath>
的内容与相应标准C库中的math.h
相同,但有一些变化(C++11中的§26.8/4):
这些标头[
<cmath>
和<cstdlib>
]的内容分别与标准C库标头<math.h>
和<stdlib.h>
相同[…]
然而,它们在std
(C++11中的§17.6.1.2/4)的命名空间范围内:
然而,在C++标准库中,声明(在C中定义为宏的名称除外)在命名空间std的命名空间范围(3.3.6)内。
因此,总结一下,round
函数在C++03中不可用,因此使用-std=c++0x
选项进行编译,并将其称为std::round
。
- std::to_string - 'to_string' 不是 'std' 的成员 - Visual Studio Code 1.42.0
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 在这种情况下,如何传递成员函数而不是函数?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- FreeFileSync C++错误:'byte'不是 'std' 的成员
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- Boost 绑定和"result_type":不是成员,对 c++03 友好
- basic_thread_pool 不是 boost::executors 的成员
- 如何解决 ReLU 不是构建时火炬::nn 错误的成员?
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- 获取 C2039:"交换":不是成员错误,如何解决?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 使用派生类中的静态成员而不是基类
- 无法从好友功能访问类的私有成员?"ostream"不是"std"的成员?
- C++ 成员不是变量,而只是数据类型的名称吗?
- 'generate'不是窗口头文件中'std::random_device'的成员<random>
- 枚举成员不是类型错误
- Clang声称通用lambda参数的constexpr成员不是constexpr
- 静态类成员不是与 this 指针没有关联吗?
- "要求成员'*******'不是结构或工会"是什么意思?