我正在尝试将某些C ++代码从Windows移植到OS X(使用Xcode)。
以下代码:
writePosition %= std::size(bufferL);
正在生成错误:
在命名空间“ std”中没有名为“ size”的成员
我该如何解决?
答案 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支持的编译器。