С++ ошибка компиляции: ISO С++ запрещает сравнение между указателем и целым числом
Я пытаюсь привести пример из книги Bjarne Stroustrup С++, третье издание. При реализации довольно простой функции я получаю следующую ошибку времени компиляции:
error: ISO C++ forbids comparison between pointer and integer
Что может быть причиной этого? Вот код. Ошибка находится в строке if
:
#include <iostream>
#include <string>
using namespace std;
bool accept()
{
cout << "Do you want to proceed (y or n)?\n";
char answer;
cin >> answer;
if (answer == "y") return true;
return false;
}
Спасибо!
Ответы
Ответ 1
У вас есть два способа исправить это. Предпочтительным способом является использование:
string answer;
(вместо char
). Другой возможный способ исправить это:
if (answer == 'y') ...
(обратите внимание на одинарные кавычки вместо double, представляющие константу char
).
Ответ 2
Строковый литерал делится кавычками и имеет тип char * not char.
Пример: "hello"
Поэтому, когда вы сравниваете char с char *, вы получите ту же ошибку компиляции.
char c = 'c';
char *p = "hello";
if(c==p)//compiling error
{
}
Чтобы исправить использование литерала char, который ограничивается одинарными кавычками.
Пример: 'c'
Ответ 3
Вам нужно изменить эти двойные кавычки на одиночные.
то есть. if (answer == 'y')
возвращает true
;
Вот некоторая информация о струнных литералах в С++:
http://msdn.microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx
Ответ 4
"y" является строкой/массивом/указателем. 'y' является char/интегральным типом
Ответ 5
Нельзя использовать одиночные кавычки для констант char.
Поэтому используйте
if (answer == 'y') return true;
Вместо
if (answer == "y") return true;
Я тестировал это, и он работает