【发布时间】:2017-02-13 23:01:38
【问题描述】:
我在 Windows 上成功编译了一个应该是跨平台的代码。现在,当使用 Mac OS X 在 Xcode 中编译它时,我得到:
std::valarray<float> v(32);
...
std::sort(begin(v), end(v)); # Use of undeclared identifier 'begin'
std::sort(std::begin(v), std::end(v)); # No member named 'begin' in namespace 'std'
std::sort(std::valarray::begin(v), std::valarray::end(v)); # Idem, error as well
为什么会出现错误No member named 'begin' in namespace 'std'?
【问题讨论】:
-
非成员
begin是 C++11 功能,请尝试在 XCode 中启用它。 -
@Basj:刚刚在测试时看到了这一点:) 我确认将 -std=c++11 添加到命令行中可以正常编译。我很高兴我没有未经测试就回答过:)
-
什么时候 std=c++11 会成为默认值?快到 2016 年了,有很多问题只有通过添加那个开关才能解决!
-
@Jean-FrançoisFabre 我认为这是一些旧的 XCode 版本?我的意思是,不包含 C++11 对用户不友好,而且这是在 Mac 上,从公理上讲,它是用户友好的。呵呵。
-
仅供其他人查找,这是地图的另一种可能性。如果您的地图是数据成员,并且您尝试在限定为
const的非静态类方法中访问它,那么访问 mymap[x] 将导致编译时错误,因为 mymap[x] 将如果 x 已经不存在,则为 x 创建一个条目,因此它正在修改标记为const的函数中的数据成员,因此违规。使用 mymap.at(x),如果你知道 x 已经存在于 mymap 中,使用 map.find(x)
标签: c++ xcode namespaces std