Удалить предупреждение: «переменная« результат »используется неинициализированной всякий раз, когда« если »условие ложно» в C ++ - PullRequest
1 голос
/ 25 марта 2020

Я видел вопросы, подобные этому, но ни один из них не помог мне из-за того, что я не смог найти тот, который использовал шаблон. Для домашнего задания мне нужно кодировать стек, который можно использовать с любым типом переменной, поэтому я решил использовать шаблон. Это мешает мне инициализировать переменные, мой код дает мне предупреждение для функции pop (), может кто-нибудь дать мне совет, как удалить такое предупреждение?

моя функция pop ():

template<typename T>
    T stack<T>::pop(){
        T result;
        if(!empty()){
            result = tos->data;
            Node<T> *tmp = tos;
            tos = tos->next;
            delete tmp;
        }else{
            std::cerr<<"ERROR empty stack"<<std::endl;
        }
        return result;
    }

1 Ответ

4 голосов
/ 25 марта 2020

Вместо простой печати в std::cerr ваш метод pop() должен генерировать исключение, если он сталкивается с чем-то, с чем он не может иметь дело. Сбой без возврата и возврат неинициализированного объекта вызовет последующее возникновение проблем.

Вы можете выдать исключение следующим образом:

//...
else {
    throw std::runtime_error("ERROR empty stack");
}
//...

Тогда вам нужно только объявить result в ветке true вашего оператора if.

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