Переменной управления циклом присваивается пустая строка со второй итерации и далее [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Переменной управления циклом присваивается пустая строка со второй итерации и далее [закрыто]

Сообщение Anonymous »

У меня есть следующий фрагмент C++:

Код: Выделить всё

std::string someVar;
configuration = YAML::LoadFile(configurationFilePath);

std::vector necessaryKeys = {"abc","xyz","uvw","lmn"}

for(const auto key: necessaryKeys){
//..
if(key == "xyz") {
someVar = "some_config_key";
}
//..
}

filePath = mRootDir + configuration[someVar]["ConfigurationFilePath"].as();
Мой код завершился сбоем из-за следующей ошибки:

Код: Выделить всё

terminate called after throwing an instance of 'YAML::TypedBadConversion'
what():  bad conversion
Итак, я все отладил только для того, чтобы заметить странное поведение. for ключу переменной управления циклом правильно присваивается первое значение abc в необходимом ключе. Однако во всех дальнейших итерациях ему присваивается пустая строка (

Код: Выделить всё

""). Таким образом, переменной someVar
внутри тела цикла for никогда не присваивается значение some_config_key. Это приводит к сбою конфигурации[someVar]["ConfigurationFilePath"].as(), вероятно, потому, что нет узла YAML, связанного с конфигурацией[someVar] (т. е. Configuration[""]), и, следовательно, Configuration[someVar]["ConfigurationFilePath"], вероятно, имеет значение NULL. Кажется, это заставляет as() выдавать ошибку неправильного преобразования.

Ошибка выдается из этой строки в библиотеке yaml-cpp:

Код: Выделить всё

if (node.Type() != NodeType::Scalar)
throw TypedBadConversion(node.Mark());
Узел.Type() — это YAML::NodeType::Undefine.
Почему ключевой > присваивается пустая строка со второй итерации и далее? Или мой нуб в C++ неправильно понимает, что здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/786 ... eration-on

Вернуться в «C++»