错误 C2075:数组初始化需要大括号
Error C2075: array initialization needs curly braces
我想使用 STL 算法中的函数反转 char
类型的 2d 数组std::reverse()
。
#include <iostream>
#include <algorithm>
int main()
{
char array[10][5];
initiate_array(array); // this takes care of initializing array
std::reverse(array, array + 10); // <- error C2075
return 0;
}
但是我一直收到此错误:C2075: '_Tmp' : array initialization needs curly braces
我以前从未遇到过!
我使用 MSVC++ 2008 编译我的代码。
问题的根源是数组不能相互分配。让我们考虑如何实现std::reverse
:
template<class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last)
{
while ((first != last) && (first != --last)) {
std::swap(*first++, *last);
}
}
std::swap
需要能够分配你给它的任何参数,以便交换它们。在您的情况下,您有一个数组数组;所以它试图将数组 [0] 中的 char[5] 数组与数组 [10] 中的数组交换,这在C++无效。
但是,在 C++11 中,这确实按预期工作;不是因为您现在可以分配数组,而是因为std::swap
获得了重载,使其适用于数组,有效地映射到std::swap_ranges
。但是您应该意识到,这不仅仅是交换指针,而是单独交换数组类型(在您的情况下为字符)。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 在函数内部的声明中初始化数组,并在外部使用它
- 错误 C2075:数组初始化需要大括号