web-dev-qa-db-fra.com

Erreur de compilation c ++: ISO C ++ interdit la comparaison entre le pointeur et l'entier

J'essaie un exemple du livre C++ de Bjarne Stroustrup, troisième édition. Lors de l'implémentation d'une fonction plutôt simple, j'obtiens l'erreur de temps de compilation suivante:

error: ISO C++ forbids comparison between pointer and integer

Qu'est-ce qui peut causer cela? Voici le code. L'erreur se trouve dans la ligne 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;
}

Merci!

25
Morlock

Vous avez deux façons de résoudre ce problème. La manière préférée est d'utiliser:

string answer;

(au lieu de char). L'autre moyen possible de le corriger est:

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

(notez les guillemets simples au lieu de doubles, représentant une constante char).

38
Chris Jester-Young

Un littéral de chaîne est délimité par des guillemets et est de type char * not char.

Exemple: "hello"

Ainsi, lorsque vous comparez un caractère à un caractère *, vous obtiendrez la même erreur de compilation.

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

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

Pour corriger, utilisez un littéral de caractère délimité par des guillemets simples.

Exemple: 'c'

7
Brian R. Bondy

Vous avez besoin de changer ces guillemets doubles en simples. c'est à dire. if (answer == 'y') renvoie true;

Voici quelques informations sur les littéraux de chaîne en C++: http://msdn.Microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx

5
Craig

"y" est une chaîne/tableau/pointeur. 'y' est un type char/integral

3
Anycorn

Vous devez vous rappeler d'utiliser des guillemets simples pour les constantes char. Alors utilisez

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

Plutôt que

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

J'ai testé ça et ça marche

2
Danny Mahoney