错误 C2075:数组初始化需要大括号

Error C2075: array initialization needs curly braces

本文关键字:初始化 C2075 数组 错误      更新时间:2023-10-16

我想使用 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。但是您应该意识到,这不仅仅是交换指针,而是单独交换数组类型(在您的情况下为字符)。