Рефакторинг кода в переполнении стека

Функция конструктора для маршрута класса изначально содержала следующий код, который проверяет, существует ли элемент («gpx», «rte» и т. Д.) В файле. Который работает как надо.

  if (! elementExists(source,"gpx"))
{
oss << endl << "no gpx tag";
constructorReport = oss.str();
constructorSucceeded = false;
return;
}
if (! elementExists(source,"rte"))
{
oss << endl << "no rte tag";
constructorReport = oss.str();
constructorSucceeded = false;
return;
}

Я попытался ввести функцию, чтобы заменить эти операторы if. Программа строит нормально.

void Route::constCheck(string source, string type)
{

if (! XML_Parser::elementExists(source, type))
{
std::ostringstream oss;
oss << std::endl << "no" << type <<" tag";
constructorReport = oss.str();
constructorSucceeded = false;
return;
}
}

Я изменил файл gpx, который он проверяет, чтобы вызвать ошибку, но с моей добавленной функцией он продолжает, как будто ошибки нет.

Любая помощь приветствуется, и, пожалуйста, дайте мне знать, если вам нужно больше информации. Я пытался держать код легким в соответствии с руководящими принципами.

0

Решение

В исходном коде вы возвращаетесь из функции в первый раз, когда один из тестов завершается неудачей, вы не продолжаете пробовать другие тесты.

Теперь, когда вы переместили тест в функцию, вызывающий не сможет узнать, провалился ли тест, поэтому он выполнит все из них и никогда не вернется из своей функции при сбое одного из них. Эта функция необходима для возврата логического значения, которое указывает, не удалось ли это сделать.

bool Route::constCheck(string source, string type)
{

if (! XML_Parser::elementExists(source, type))
{
std::ostringstream oss;
oss << std::endl << "no" << type <<" tag";
constructorReport = oss.str();
constructorSucceeded = false;
return false;
}
return true;
}

Тогда замена вашего исходного кода будет выглядеть так:

if (!constCheck(source, "gpx")) {
return;
}
if (!constCheck(source, "rte")) {
return;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]