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

20

Я пытаюсь привести пример из книги Бьярна Страуступа на 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
источник
  • y ​​в вашем коде - строковый литерал (двойные кавычки) "", символ - только (одинарные кавычки) '' –  Alex 15.02.2010 в 03:11
  • Проверьте свой ввод. Пример в Stroustup имеет char answer = 0; и если (ответ == 'y'), верните true ;. –  CB Bailey 15.02.2010 в 08:56

5 ответов

31

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

string answer;

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

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

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

    
ответ дан Chris Jester-Young 15.02.2010 в 03:10
7

Строковый литерал делится кавычками и имеет тип 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
5

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

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

    
ответ дан Craig 15.02.2010 в 03:09
  • Вы имеете в виду, что двойные кавычки не являются взаимозаменяемыми в c ++? –  Morlock 15.02.2010 в 03:10
  • Нет, двойные кавычки - char [] (куча символов), одиночные кавычки - это один символ. –  Chris Jester-Young 15.02.2010 в 03:11
  • только что разместил ссылку для вас в библиотеке msdn. –  Craig 15.02.2010 в 03:12
3

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

    
ответ дан Anycorn 15.02.2010 в 03:09
1

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

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

Вместо

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

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

    
ответ дан Danny Mahoney 28.05.2014 в 14:27