2010-05-27 2 views
0

Итак, у меня есть выражение регулярных выражений для синтаксического анализа определенных частей имени файла. Я пытаюсь сохранить каждую часть в своем собственном векторе, пока не буду использовать ее позже, но это не позволит мне. Одна ошибка, которую я получаю, когда пытаюсь сделать вектор System :: String ^, это то, что error C3698: 'System::String ^' : cannot use this type as argument of 'new' Затем, когда я пытаюсь просто создать вектор std :: string, он не может неявно преобразовать в тип System :: String^и casting тоже не будет работать.Возникли проблемы с созданием векторов System :: String^

void parseData() 
{ 
    System::String^ pattern = "(\\D+)(\\d+)(\\w{1})(\\d+)\\.(\\D{3})"; 
    std::vector <System::String^> x, y, filename, separator; 

    Regex re(pattern); 

    for (int i = 0; i < openFileDialog1->FileNames->Length; i++) 
    { 
     Match^ m = re.Match(openFileDialog1->FileNames[i]); 
     filename.push_back(m->Groups[0]->Value);/* 
     x.push_back(m->Groups[1]->Value); 
     separator.push_back(m->Groups[2]->Value); 
     y.push_back(m->Groups[3]->Value);*/ 
    }      
} 

ответ

1

Вы можете использовать библиотеку STL/CLR, если вы действительно предпочитаете использовать коллекции STL. Это не совсем популярно, this web page показывает, почему.

Использование List<String^>

1

станд :: вектор использует новый, чтобы выделить это объекты, но вы не можете выделить System :: String^с новым, так как это управляемый тип.

+3

Рассмотрите возможность использования зОго :: строки вместо или управляемого типа коллекции, как список . – TreDubZedd

+0

@iconiK: Я уже сказал, что .. @TreDubZedd: Я уже сказал, что я тоже пытался использовать std: string. Однако я попробую List завтра. – Justen

+0

@ Justen, где вы сказали, что std :: vector использует new для выделения своих объектов, и он не может сделать это для управляемых? – CMircea

Смежные вопросы