c ++ ошибка компиляции: ISO C ++ запрещает сравнение между указателем и целым числом

17

Я пытаюсь привести пример из книги Бьярна Страуступа на 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;
}

Спасибо!

    
задан Morlock 15.02.2010 в 03:05
источник

5 ответов

30

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

string answer;

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

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

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

    
ответ дан Chris Jester-Young 15.02.2010 в 03:10
источник
6

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

Пример: "hello"

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

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

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

Чтобы исправить использование символьного символа, который ограничен одиночными кавычками.

Пример: 'c'

    
ответ дан Brian R. Bondy 15.02.2010 в 03:10
источник
4

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

Вот некоторая информация о струнных литералах в C ++: Ссылка

    
ответ дан Craig 15.02.2010 в 03:09
источник
2

"y" является строкой / массивом / указателем. 'y' - тип char / integer

    
ответ дан Anycorn 15.02.2010 в 03:09
источник
0

Вы должны помнить о применении одиночных кавычек для констант char. Поэтому используйте

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

Вместо

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

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

    
ответ дан Danny Mahoney 28.05.2014 в 14:27
источник