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!
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
).
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'
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
"y" est une chaîne/tableau/pointeur. 'y' est un type char/integral
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