2010-02-15 2 views
18

J'essaie un exemple du livre C++ de Bjarne Stroustrup, troisième édition. Bien que la mise en œuvre d'une fonction assez simple, je reçois l'erreur de compilation suivante:Erreur de compilation C++: ISO C++ interdit la comparaison entre pointeur et nombre entier

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

Ce qui pourrait être la cause? Voici le code. L'erreur est 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!

+10

y dans votre code est une chaîne littérale (double guillemets) ' ""', un char est seulement (guillemets simples) '''' ' – Alex

+1

Vérifiez votre frappe. L'exemple de Stroustup a 'char answer = 0;' et 'if (answer == 'y') renvoie true;'. –

Répondre

30

Vous avez deux façons de résoudre ce problème. Le moyen préféré consiste à utiliser:

string answer; 

(au lieu de char). L'autre façon possible de le fixer est:

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

(notes entre guillemets simples au lieu de deux, ce qui représente une constante char).

4

Vous devez modifier ces guillemets doubles en simples. ie. if (answer == 'y') renvoie true;

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

+1

Vous voulez dire que les guillemets doubles ne sont pas interchangeables en C++? – Morlock

+4

Non, les guillemets doubles sont 'char []' (un groupe de caractères), les guillemets simples est un seul 'char'. –

+0

vient de poster un lien pour vous à la bibliothèque msdn. – Craig

2

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

6

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

Exemple: "hello"

Ainsi, lorsque l'on compare un char un char * 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 char qui est délimité par des guillemets simples.

Exemple: 'c'

0

Vous devez vous rappeler d'utiliser des guillemets simples pour les constantes de char. donc utiliser

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

Plutôt que

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

Je l'ai testé cela et il fonctionne