Ошибка компиляции c ++: ISO C ++ запрещает сравнение между указателем и целым числом - PullRequest
25 голосов
/ 15 февраля 2010

Я пробую пример из книги Бьярна Страуструпа C ++, третье издание. При реализации довольно простой функции я получаю следующую ошибку времени компиляции:

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;
}

Спасибо!

Ответы [ 5 ]

38 голосов
/ 15 февраля 2010

У вас есть два способа это исправить. Предпочтительным способом является использование:

string answer;

(вместо char). Другой возможный способ исправить это:

if (answer == 'y') ...

(обратите внимание на одинарные кавычки вместо двойных, представляющих char константу).

7 голосов
/ 15 февраля 2010

Строковый литерал отделяется кавычками и имеет тип char *, а не char.

Пример: "hello"

Таким образом, когда вы сравниваете char с char *, вы получите ту же ошибку компиляции.

char c = 'c';
char *p = "hello";

if(c==p)//compiling error
{
} 

Для исправления используйте символьный литерал, который разделен одинарными кавычками.

Пример: 'c'

5 голосов
/ 15 февраля 2010

Вам нужно изменить эти двойные кавычки на синглы. то есть. if (answer == 'y') возвращает true;

Вот некоторая информация о строковых литералах в C ++: http://msdn.microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx

3 голосов
/ 15 февраля 2010

"y" - это строка / массив / указатель. 'y' - тип char / целое число

2 голосов
/ 28 мая 2014

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

if (answer == 'y') return true;

Вместо

if (answer == "y") return true;

Я проверил это, и оно работает

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