我正在尝试将一些C++代码从Windows移植到OS X(使用Xcode)。
以下是代码:
writePosition %= std::size(bufferL);
出现错误:
命名空间'std'中没有名为'size'的成员
我该如何解决这个问题?
std::size()
自C++17开始可用。请尝试为您的编译器启用-std=c++17
。
此外,请确保源文件包含#include <iterator>
,直接或间接通过#include
以下任何一个头文件来包含:
<array>
<deque>
<forward_list>
<list>
<map>
<regex>
<set>
<string>
<string_view>
<unordered_map>
<unordered_set>
<vector>
std::size
接受两种类型的参数:具有名为size()
的方法的容器(来自STL或用户定义)和固定大小的数组。bufferL
是否是其中之一。bufferL
是固定大小的数组,并且您没有包含任何包含STL容器的头文件,则必须包括iterator
头文件。std::size
,编译器都无法识别它。你回答中唯一与问题相关的部分是 "你必须包含 iterator
头文件". - Remy Lebeau std::size
,您需要确保包含#include <iterator>
。另一件事是检查编译器是否支持C++17。此功能仅适用于符合C++17标准的编译器。bufferL
的类型不同,你会得到 no matching function to call
,而不是 OP 得到的结果。提供的两个链接在这种情况下都没什么帮助。 - Bartek Banachewiczstd::size
的作用并不回答OP关于为什么编译器未知std::size
的实际问题。你的回答中没有任何内容回答该问题。使用size_t
与解决此问题无关。而且,使用sizeof()
作为替代方案就是错误的,它不能用于获取容器的size
,只能用于固定数组,即使是这样,您也必须记住将数组的大小除以元素类型的大小才能获得正确的size
值。 - Remy Lebeau
std::size_t
?bufferL
是什么类型? - R Sahusizeof
还是size_t
? - Tas<iterator>
- 没有 [mcve],无法确定。 - Toby Speight