c++ compileerfout: ISO C++ verbiedt vergelijking tussen pointer en integer

Ik probeer een voorbeeld uit het C++-boek van Bjarne Stroustrup, derde editie. Tijdens het implementeren van een vrij eenvoudige functie, krijg ik de volgende fout bij het compileren:

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

Waardoor kan dit worden veroorzaakt? Hier is de code. De fout staat in de regel 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;
}

Bedankt!


Antwoord 1, autoriteit 100%

Je kunt dit op twee manieren oplossen. De geprefereerde manier is om:

string answer;

(in plaats van char). De andere mogelijke manier om het op te lossen is:

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

(let op enkele aanhalingstekens in plaats van dubbele, wat neerkomt op een char constante).


Antwoord 2, autoriteit 14%

Een letterlijke tekenreeks wordt gescheiden door aanhalingstekens en is van het type char* en niet char.

Voorbeeld: "hello"

Dus als je een char met een char* vergelijkt, krijg je dezelfde compileerfout.

char c = 'c';
char *p = "hello";
if(c==p)//compiling error
{
} 

Gebruik een letterlijke char die wordt gescheiden door enkele aanhalingstekens om dit op te lossen.

Voorbeeld: 'c'


Antwoord 3, autoriteit 10%

Je moet die dubbele aanhalingstekens veranderen in singles.
d.w.z. if (answer == 'y') geeft true terug;

Hier is wat informatie over String Literals in C++:
http://msdn.microsoft.com/en- us/library/69ze775t%28VS.80%29.aspx


Antwoord 4, autoriteit 8%

“y” is een string/array/pointer. ‘y’ is een char/integraal type


Antwoord 5, autoriteit 6%

Je moet niet vergeten om enkele aanhalingstekens te gebruiken voor char-constanten.
Dus gebruik

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

In plaats van

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

Ik heb dit getest en het werkt

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes