В настоящее время я преобразовываю свой код в С++ 11, и у меня возникают проблемы со следующим циклом for на основе диапазона (FWIW, тот же код раньше работал нормально с BOOST for_each).
Элемент mLibraryFiles
(вектор STL) является частью экземпляра singleton и гарантированно существует после возврата метода, однако, когда вызывающий объект проверяет возвращенный объект, он содержит только мусор.
Отладка через него, похоже, превращается из ожидаемого содержимого в мусор сразу после возврата из метода, поэтому я полагаю, что, должно быть, я что-то неправильно понял о том, как на самом деле работает цикл на основе диапазона С++ 11:
Entry* FindEntry(string inName)
{ Entry *rs = NULL;
for (auto libraryEntry : mLibraryFiles)
{
if (libraryEntry.filename.compare(inName) == 0)
{
rs = &libraryEntry;
break;
}
}
return rs;
}
Я ожидал, что переменная libraryEntry
представляет фактические объекты в векторе mLibraryFiles
?
Приветствуется любая информация!
(компилятор - LLVM 5.0, хотя я сомневаюсь, что это имеет значение..)
libraryEntry
является копией элементаmLibraryFiles
. Вместо этого используйтеfor (auto& libraryEntry : mLibraryFiles)
. - person Casey   schedule 18.01.2014libraryEntry.filename
являетсяstd::string
) вы можете заменитьlibraryEntry.filename.compare(inName) == 0
эквивалентнымlibraryEntry.filename == inName
. - person Casey   schedule 18.01.2014char[]
в этом проекте, ожидающем «обновления» до реальных объектов. - person Jay   schedule 18.01.2014