Ошибка компиляции инициализатора массива C ++ / CLI

Кто-нибудь может объяснить, почему следующий код не компилируется (странно отформатирован, чтобы облегчить определение проблемы):

ListView ^ listview = gcnew ListView();
listview->Items->AddRange( gcnew array<ListViewItem^> { 
    gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } ), 
    gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } ) 
});

Это дает ошибку компиляции

ошибка C2440: «инициализация»: невозможно преобразовать из «const wchar_t [4]» в «System :: Windows :: Forms :: ListViewItem ^»

Если код разбит на две строки, как показано ниже, то все хорошо:

ListView^ listview = gcnew ListView();
ListViewItem^ lvi1 = gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } );
ListViewItem^ lvi2 = gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } );
listview->Items->AddRange( gcnew array<ListViewItem^> { 
    lvi1, 
    lvi2 
});

Игнорирование того, почему кто-то хочет сделать монолитный однострочный элемент для заполнения ListView, почему компилятор не может инсталлировать ListViewItems в исходном коде и как бы такой один лайнер был бы написан?

6
задан Waldo 11 March 2011 в 22:07
поделиться