2012-06-15 330 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。但是你應該認識到,這不僅僅是交換指針,而是單獨交換數組類型(在你的情況下是字符)。