C++编译错误:ISO C++禁止指针和整数之间的比较。

42

我正在尝试从Bjarne Stroustrup的C++书籍第三版中学习一个例子。在实现一个相当简单的函数时,我遇到了以下编译时错误:

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;
}

谢谢!


18
你代码中的 y 是一个字符串常量(双引号)"",而字符常量则是(单引号)''。 - Alex
1
检查您的输入。Stroustup 的例子中有 char answer = 0;if (answer == 'y') return true; - CB Bailey
5个回答

56

您有两种方法来解决这个问题。首选的方法是使用:

string answer;

(而不是char)。修复它的另一种可能方法是:

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

(请注意单引号而不是双引号,代表一个char常量)。


8

1
你的意思是在C++中双引号不可互换使用吗? - Morlock
7
不,双引号是char[](一组字符),单引号是单个char - C. K. Young
我刚刚为您发布了一个链接,指向MSDN库。 - Craig

7
一个字符串字面量被引号包括,类型为char*而不是char。
例如:"hello" 因此,当你将一个char与一个char*进行比较时,会得到相同的编译错误。
char c = 'c';
char *p = "hello";

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

使用单引号括起来的字符字面值可以解决该问题。
示例:'c'

4
“y” 是一个字符串/数组/指针。‘y’ 是一个字符/整型类型。

3

记得在 char 常量中使用单引号。因此,使用:

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

而不是:

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

我测试过了,它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接