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

时间:2012-06-15 22:50:10

标签: c++ arrays 2d curly-braces

我想在STL算法中使用char函数反转类型为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来编译我的代码。

1 个答案:

答案 0 :(得分:3)

问题的根源是无法将数组分配给彼此。让我们考虑如何实现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。但你应该意识到这不仅仅是交换指针,而是单独交换数组类型(在你的情况下是chars)。