При бинарном поиске выдается ошибка, заставляющая значение bool 'true' или 'false' - PullRequest
2 голосов
/ 01 декабря 2011

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

bool searchByDescriptionBinary(char desc[][DESC_SIZE],
                             const int NUM_ROWS,
                             char searchValue[DESC_SIZE],
                             int& foundPosition)

 {
 int first = 0,
     last = NUM_ROWS - 1,
     middle,
     position = -1;
 bool found = false;

 while (!found && first <= last)
 {
     middle = (first + last) / 2;
     if (desc[middle] == searchValue)
     {
         found = true;
         position = middle;
     }
     else if (desc[middle] > searchValue)
         last = middle - 1;
     else
         first = middle + 1;
 }
 return position;
 }

Ответы [ 4 ]

3 голосов
/ 01 декабря 2011

Ваша функция определена с bool как тип возвращаемого значения, но она возвращает int (в форме оператора return position в конце). Это ошибка типа. Измените один или другой тип, пока они не согласятся, и он должен скомпилироваться.

1 голос
/ 01 декабря 2011

Ваша функция определена как возвращающая bool, но вы пытаетесь вернуть position, который объявлен как int.

Вы хотите вернуть found (что будет true или false), а если found == true установить foundPosition = position.

0 голосов
/ 01 декабря 2011

Вы должны return found; вместо return postion;

0 голосов
/ 01 декабря 2011

Во-первых, очень маловероятно, что вы получаете ошибку, о которой говорите, что получаете.Источником проблемы является тот факт, что вы пытаетесь return position, где position является int, из функции, объявленной для возврата bool.Что вы пытаетесь этим сделать?Почему вы пытаетесь вернуть int из bool функции?

В любом случае это не является недопустимым, то есть int будет неявно преобразовано в bool в соответствии с логическими правилами преобразования языка C ++.Некоторые компиляторы выдают предупреждение в таких случаях, но не ошибку.В любом случае, безусловно, это не то, что вы хотели.

Во-вторых, из объявления вашей функции совершенно очевидно, что вы намеревались вернуть индекс через параметр foundPosition (объявленный как int &),Оператор return в конце функции, очевидно, должен был делать return found, а не return position.И все же в своем коде вы полностью игнорируете существование foundPosition.Зачем?Почему вы пытаетесь return указать позицию, а не отправлять ее через параметр foundPosition, как было изначально задумано?Это ваш код?

В-третьих (как @Blastfurnace уже отмечал в комментариях), ваши == и > сравнения не делают то, что вы думаете, что они делают.Вы не можете сравнивать строки в стиле C, используя встроенные операторы сравнения.Вы должны использовать strcmp вместо.

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