2011-03-12 2 views
0
pseudocode : 
    function takes "int c" and "list d" 
      from start to end of the list search "c" in "list d" 
       when see it 
        return index 

Из-за записи возврата в итерации компилятор начинает жаловаться на непустую функцию. Как я могу отрезать жалобу компилятора?можно ли разрезать компилятор жалобы, если тип возврата - объект?

Примечание: c всегда в списке, но индекс его не известен.

EDIT: Если я изменюсь, как показано ниже;

pseudocode : 
    function takes "string name" and "list d" 
      from start to end of the list search "c" in "list d" 
       when see it 
        return object 

Что мне делать?

+0

@ your редактирования: Конкретный тип возврата вашей функции ничего не меняет. Если это не пустое, то все пути кода должны встретить возврат правильного (или эквивалентного/конвертируемого) типа. – Mat

ответ

5

Проводка реального кода действительно поможет. Я предполагаю, что у вас есть что-то вроде:

int find(int c, list d) { 
    for (*iterate over list*) { 
    if (item == c) 
     return index; 
    } 
    // <- nothing here 
} 

компилятор в большинстве случаев не может знать, что список всегда будет содержать c. Поэтому вам нужно добавить оператор return. Что-то вроде этого обычно:

int find(int c, list d) { 
    for (*iterate over list*) { 
    if (item == c) 
     return index; 
    } 
    // Never reached 
    return -1; // or throw an exception 
} 

(или выберите другое недопустимое значение индекса). Оставьте подробный комментарий о том, почему эта часть никогда не была достигнута. Выброс исключений может быть хорошей идеей, если вы уже используете их - это указывает на ошибки, если/когда ваше предположение о списке, всегда содержащем c, терпит неудачу.

2

Вы не можете. Помещенный «фальшивое» возвращение после цикла и поместить комментарий, как:

// This never should happen. 
    return -1; 

Также вы можете рассмотреть бросать исключение, если не нашли ... Но вопрос о компиляторе жалобе, так что вы должны иметь возвращение туда.

0

Компилятор указывает вам, что если «c» не находится в «списке d», ваша программа приводит к неуказанному поведению. Выясните, что должна вернуть ваша функция, если «c» не найден, и верните это, и компилятор перестанет жаловаться. Если вы действительно абсолютно уверены, что в списке «c», то не имеет значения, что вы возвращаете. Но если это правда, это запах кода.

+0

Никаких объяснений для этого downvote. Некоторые люди - плохие граждане. –

2

вы можете сделать, как

int index = -1 

search in list 
    if found 
    break; 

return index; 
Смежные вопросы