Подтвердить что ты не робот

С++ ошибка компиляции: 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;
}

Спасибо!

4b9b3361

Ответ 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;

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