web-dev-qa-db-ja.com

c ++コンパイルエラー:ISO C ++はポインターと整数の比較を禁止します

Bjarne StroustrupのC++本、第3版からの例を試しています。かなり単純な関数を実装しているときに、次のコンパイル時エラーが発生します。

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

これは何が原因ですか?これがコードです。エラーは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;
}

ありがとう!

25
Morlock

これを修正するには2つの方法があります。推奨される方法は次のとおりです。

string answer;

charの代わりに)。他の修正方法は次のとおりです。

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

char定数を表す、二重ではなく一重引用符に注意してください)。

38

文字列リテラルは引用符で区切られ、charではなくchar *型です。

例:"hello"

したがって、charとchar *を比較すると、同じコンパイルエラーが発生します。

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

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

修正するには、一重引用符で区切られた文字リテラルを使用します。

例:'c'

7
Brian R. Bondy

これらの二重引用符を単一に変更する必要があります。すなわち。 if (answer == 'y')true;を返します。

C++の文字列リテラルに関する情報を次に示します。 http://msdn.Microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx

5
Craig

「y」は文字列/配列/ポインタです。 「y」はchar/integralタイプです

3
Anycorn

Char定数には単一引用符を使用することを忘れないでください。だから使用する

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

のではなく

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

私はこれをテストし、動作します

2
Danny Mahoney