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;
}
ありがとう!
これを修正するには2つの方法があります。推奨される方法は次のとおりです。
string answer;
(char
の代わりに)。他の修正方法は次のとおりです。
if (answer == 'y') ...
(char
定数を表す、二重ではなく一重引用符に注意してください)。
文字列リテラルは引用符で区切られ、charではなくchar *型です。
例:"hello"
したがって、charとchar *を比較すると、同じコンパイルエラーが発生します。
char c = 'c';
char *p = "hello";
if(c==p)//compiling error
{
}
修正するには、一重引用符で区切られた文字リテラルを使用します。
例:'c'
これらの二重引用符を単一に変更する必要があります。すなわち。 if (answer == 'y')
はtrue
;を返します。
C++の文字列リテラルに関する情報を次に示します。 http://msdn.Microsoft.com/en-us/library/69ze775t%28VS.80%29.aspx
「y」は文字列/配列/ポインタです。 「y」はchar/integralタイプです
Char定数には単一引用符を使用することを忘れないでください。だから使用する
if (answer == 'y') return true;
のではなく
if (answer == "y") return true;
私はこれをテストし、動作します