предупреждение «управление достигает конца не пустой функции» в eclipse c ++, но без ошибок компиляции или времени выполнения - PullRequest
5 голосов
/ 07 декабря 2011

Вот мой код:

Composer& Database::GetComposer (string in_last_name)
{   
    for (int i = 0; i < next_slot_; i++)
    {
        if (composers_[i].last_name() == in_last_name)
             return composers_[i];
    }
}

Идея состоит в том, чтобы перебрать массив объектов Composer и вернуть ссылку на объект, чье поле last_name соответствует "in_last_name". Я понимаю, о чем говорит предупреждение, а именно о том, что, возможно, функция не будет ничего возвращать (если, скажем, пользователь введет неверную фамилию). У меня вопрос, как я могу избежать этого? Я попытался добавить «return 0» и «return NULL» после цикла for, и он не скомпилировался. Должен ли этот метод генерировать исключение, если он ничего не находит?

1 Ответ

6 голосов
/ 07 декабря 2011

Ваша функция объявлена ​​для возврата Composer&, то есть ссылки на Composer.Если ваша функция не может вернуть подходящую ссылку, и вызывающая сторона пытается использовать возвращаемое значение для чего-либо, это приведет к неопределенному поведению.

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

Composer* Database::GetComposer (string in_last_name)
{   
    for (int i = 0; i < next_slot_; i++)
    {
        if (composers_[i].last_name() == in_last_name)
             return &composers_[i];
    }
    return NULL;
}

В качестве альтернативы вы можете вызвать исключение, если ваша функция не может найти цель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...