Как уже отмечали другие, вам нужно использовать двойные кавычки ("y"
вместо 'y'
) для ваших строк, в противном случае они являются символьными литералами.
В C / C ++ есть такойвещь как многосимвольный литерал;его значение представляет собой число, состоящее из каким-то образом сложения кодов символов для отдельных символов некоторым образом, определяемым реализацией.Вы не хотите их использовать, если у вас нет действительно веской причины.Единственная причина, по которой вам нужно знать о них, - это понимание предупреждений и сообщений об ошибках:
test.cpp:19: error: no match for ‘operator==’ in ‘choice == 1919378802’
... означает, что нет способа сравнить строку с числом 1919378802, как это делает ваш компиляторинтерпретирует 'hamburger'
как среднее.
Как только это будет исправлено, ваше новое сообщение об ошибке:
.test.cpp:23: error: no match for ‘operator||’ in ...
.test.cpp:23: note: candidates are: operator||(bool, bool) <built-in>
означает, что что-то пошло не так с одним из операторов ||
.Возможно, один из его операндов не был логическим выражением.«Примечание» говорит вам, что есть встроенный ||
для двух bool
с, но он не может использоваться в этой ситуации.
Решение : заменитьopt = 'Yes'
от opt == "Yes"
.
Одиночное =
, присваивание, означает, что результатом этого выражения является не логическое значение, а строка, и для логического значения operator||
не существует *1026*со строкой.
Стиль Примечание. Обычно считается, что лучше не использовать объявление using namespace std
.Вместо этого явно обращайтесь к стандартным библиотечным материалам (cout
, endl
, string
, getline
), используя префикс std::
, как в std::string
.