没有名为'的成员;尺寸';在命名空间中';std&x27; 我试图将一些C++代码从Windows移植到OS X(使用XCODE)。

没有名为'的成员;尺寸';在命名空间中';std&x27; 我试图将一些C++代码从Windows移植到OS X(使用XCODE)。,c++,c++17,C++,C++17,以下代码: writePosition %= std::size(bufferL); 正在生成错误: 命名空间“std”中没有名为“size”的成员 如何修复此问题?std::size()可用。尝试为编译器启用-std=c++17 此外,通过使用以下任何标题,再次检查源文件是否包含直接或间接的#include: 从cppreference中获取信息,我看到std::size接受两种类型的参数:具有名为size()的方法(来自stl或用户定义)的容器和固定大小的数组 您

以下代码:

writePosition %= std::size(bufferL);
正在生成错误:

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

如何修复此问题?

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

此外,通过使用以下任何标题,再次检查源文件是否包含直接或间接的
#include


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

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


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

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


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

您的意思是使用
std::size\t
?什么是
bufferL
?你的意思是
sizeof
还是
size\u t
?供大家参考:你需要编译成C++17或更高版本。也许你忘了包含
-没有一个,很难说。这并不能回答问题。如果
bufferL
的类型不同,您将得到
没有要调用的匹配函数,而不是OP得到的。在这种情况下,提供的两个链接都没有帮助。我试图解释什么是尺寸,为什么它可能不适合他。这些链接是作为他可以尝试的替代解决方案提供的。如果我弄错了,请纠正我。我相信我刚刚做了。@ShrikanthN解释
std::size
的作用并没有解决OP的实际问题,即编译器为什么不知道
std::size
。你的回答中没有任何东西能回答这个问题。使用
size\u t
与解决该问题无关。使用
sizeof()
作为替换是完全错误的,它不能用于获取容器的
size
,只能使用固定数组,即使这样,您也必须记住将数组的大小除以元素类型的大小,以获得正确的
大小
值。@RemyLebeau@Bartek Banachewicz-感谢您的指导。我现在已经修改了我的答案,希望它现在会更有帮助。虽然你说的是真的,但大部分都没有解决OP的实际问题,即为什么编译器不知道
std::size
,而不管传递给它的是什么。答案中唯一与问题相关的部分是“您必须包含
迭代器
头文件”。