名称空间“ std”中没有名为“ size”的成员

时间:2018-07-26 04:56:27

标签: c++ c++17

我正在尝试将某些C ++代码从Windows移植到OS X(使用Xcode)。

以下代码:

writePosition %= std::size(bufferL);

正在生成错误:

  

在命名空间“ std”中没有名为“ size”的成员

我该如何解决?

3 个答案:

答案 0 :(得分:10)

std::size()可用starting from C++17。尝试为编译器启用-std=c++17

此外,通过#include <iterator>设置以下任一标头,直接或间接检查源文件是否包含#include

  • <array>
  • <deque>
  • <forward_list>
  • <list>
  • <map>
  • <regex>
  • <set>
  • <string>
  • <string_view>
  • <unordered_map>
  • <unordered_set>
  • <vector>

答案 1 :(得分:1)

从cppreference中获取信息,我发现std::size接受两种参数:具有称为size()(来自stl或用户定义)的方法的容器和固定大小的数组。

您应该检查bufferL是否为其中之一。

如果iterator是固定大小的数组,并且还没有包含任何包含来自stl的容器的标头,则还必须包含bufferL标头文件。

答案 2 :(得分:0)

要使用std::size,您必须确保包含#include <iterator>。您还需要检查的另一件事是编译器支持C ++ 17。此功能仅适用于符合C ++ 17标准的编译器。

将IDE中的编译器设置更改为C ++ 17支持的编译器。