2012-06-15 1143 views
0

我想在STL算法中使用std::reverse()函数反转类型为char的二维数组。错误C2075:数组初始化需要大括号

#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来编译我的代码。

+0

您可能需要一个字符串向量。问题是数组所持有的类型是另一个数组。 – chris

+0

@chris是啊,'array'是一个指针数组的指针。我想颠倒这个数组的内容。我不能那样做吗? – Jonas

+2

@Jonas不,它不是。 'array'是一个数组数组。数组与指针不同。 –

回答

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]中的char [5]数组交换,这是无效的C++。

但是,在C++ 11中的这确实按预期工作;不是因为你现在可以分配数组,而是因为std::swap已经获得了一个超载,使它适用于数组,因此可以有效地映射到std::swap_ranges。但是你应该认识到,这不仅仅是交换指针,而是单独交换数组类型(在你的情况下是字符)。