2010-02-15 48 views
18

Estoy intentando un ejemplo del libro C++ de Bjarne Stroustrup, tercera edición. Al implementar una función bastante simple, obtengo el siguiente error de tiempo de compilación:C++ error de compilación: ISO C++ prohíbe la comparación entre el puntero y el entero

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

¿Qué podría estar causando esto? Aquí está el código. El error está en la línea de 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; 
} 

Gracias!

+10

y en su código es una cadena literal (comillas dobles) ' "" ', una char es único (comillas simples) '''' – Alex

+1

Compruebe su tipeo. El ejemplo en Stroustup tiene 'char answer = 0;' y 'if (answer == 'y') return true;'. –

Respuesta

30

Tienes dos maneras de solucionar este problema. La forma preferida es utilizar:

string answer; 

(en lugar de char). La otra forma posible para solucionarlo es:

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

(nota comillas simples en lugar de doble, lo que representa una constante char).

4

Necesita cambiar esas comillas dobles en singles. es decir. if (answer == 'y') devuelve true;

Aquí hay alguna información sobre literales de cadena en C++: http://msdn.microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx

+1

¿Quiere decir que las comillas dobles no son intercambiables en C++? – Morlock

+4

No, las comillas dobles son 'char []' (un grupo de caracteres), comillas simples es un solo 'char'. –

+0

acaba de publicar un enlace para la biblioteca msdn. – Craig

2

"y" es una cadena/gama/puntero. 'y' es un tipo completo/integral

6

Un literal de cadena está delimitado por comillas y es del tipo char * not char.

Ejemplo: "hello"

Por eso, cuando se compara un char a un char * para obtener este mismo error de compilación.

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

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

Para solucionarlo, utilice un literal de carácter delimitado por comillas simples.

Ejemplo: 'c'

0

Recuerde utilizar comillas simples para constantes de caracteres. Así utilizar

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

En lugar de

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

He probado esto y funciona

Cuestiones relacionadas