none
Помогите с поиском ошибки RRS feed

  • Вопрос

  • есть код:

    inline int chek(my_data* nHead)
    {
        static my_data* pFound;  
        pFound = nHead;
        while(pFound->next != 0)
      {
         if(pFound->data >= 0 && pFound->data <= 1)
             return 1;
         else
             return 0;
       pFound = pFound->next;
       }
    }

    При компиляции выдает ошыбку:

    Warning 1 warning C4715: 'chek' : not all control paths return a value 

    Помогите пожалуйста, где промах..


    • Изменено ulcerModerator 19 декабря 2012 г. 4:13 Исправил название темы
    16 декабря 2012 г. 22:23

Ответы

  • Собственно тот код, который есть, логически неверный. Т.к. цикл выполнится максимум один раз, а строка

    pFound = pFound->next;

    вообще никогда, потому что до нее будет return; Т.е. цикла как бы и нет, а есть обычный if.

    Скорее всего, код должен выглядеть как-то так:

    inline int check(my_data* nHead)
    {
       static my_data* pFound = nHead; // static внутри функций лучше избегать, если в этом нет реальной необходимости
       while(pFound->next != 0)
       {
         if(pFound->data >= 0 && pFound->data <= 1)
             return 1;
         pFound = pFound->next;
       }
       return 0;
    }
    P.S. Не забывайте про "жи", "ши". Это ж 5ый класс, если не раньше.



    • Предложено в качестве ответа Abolmasov Dmitry 18 декабря 2012 г. 9:02
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:51
    17 декабря 2012 г. 6:29
  • Приветствую.

    Ну там написано чего ему не нравится.
    Если метод объявлен как возвращающий чего-то кроме void,
    то он должен это возвращать обязательно.
    Ну или ошибку кидать наверное.

    У Вас же, возврат есть только в цикле, в который может и не войти.
    • Изменено INFEL8 17 декабря 2012 г. 4:39
    • Предложено в качестве ответа YatajgaEditor 17 декабря 2012 г. 6:14
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:51
    17 декабря 2012 г. 4:39

Все ответы

  • Приветствую.

    Ну там написано чего ему не нравится.
    Если метод объявлен как возвращающий чего-то кроме void,
    то он должен это возвращать обязательно.
    Ну или ошибку кидать наверное.

    У Вас же, возврат есть только в цикле, в который может и не войти.
    • Изменено INFEL8 17 декабря 2012 г. 4:39
    • Предложено в качестве ответа YatajgaEditor 17 декабря 2012 г. 6:14
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:51
    17 декабря 2012 г. 4:39
  • Собственно тот код, который есть, логически неверный. Т.к. цикл выполнится максимум один раз, а строка

    pFound = pFound->next;

    вообще никогда, потому что до нее будет return; Т.е. цикла как бы и нет, а есть обычный if.

    Скорее всего, код должен выглядеть как-то так:

    inline int check(my_data* nHead)
    {
       static my_data* pFound = nHead; // static внутри функций лучше избегать, если в этом нет реальной необходимости
       while(pFound->next != 0)
       {
         if(pFound->data >= 0 && pFound->data <= 1)
             return 1;
         pFound = pFound->next;
       }
       return 0;
    }
    P.S. Не забывайте про "жи", "ши". Это ж 5ый класс, если не раньше.



    • Предложено в качестве ответа Abolmasov Dmitry 18 декабря 2012 г. 9:02
    • Помечено в качестве ответа Abolmasov Dmitry 25 декабря 2012 г. 12:51
    17 декабря 2012 г. 6:29
  • Привет.

    Пожалуйста, не бросайте тему без ответа или комментариев.

    Спасибо.


    Для связи [mail]

    18 декабря 2012 г. 8:54