两段相似C++代码为何出现指针与整数比较错误?
为何两段看似逻辑一致的C++代码一段报错?
两段代码对比
第一段代码:
#include <iostream> using namespace std; int main () { do { cout<<"Hello world"; char yn='y'; } while (yn=='y' || yn=='Y'); return 0; }
第二段代码:
#include <iostream> using namespace std; int main () { char yn='y'; do { cout<<"Hello world"; } while (yn=='y' || yn=='Y'); return 0; }
报错信息
comparison between pointer and integer ('double (*)(int, double)' and 'char') } while (yn=='y' || yn=='Y');
问题原因
核心是变量作用域的差异:
- 第一段代码里,
char yn='y';定义在do循环的循环体内部,它的作用域只限于循环体的{}范围内。当程序执行到while条件判断时,这个yn已经超出作用域被销毁,编译器会去全局作用域寻找名为yn的标识符。你的开发环境中恰好存在一个签名为double yn(int, double)的函数,编译器将yn解析成了函数指针,因此出现了「指针与整数比较」的类型不匹配错误。哪怕全局没有同名函数,这段代码也会报「未定义标识符yn」的编译错误。 - 第二段代码里,
char yn='y';定义在main函数、do-while循环的外部,它的作用域覆盖了整个循环结构,while条件中的yn能正确指向这个char类型变量,因此可以正常编译。
内容的提问来源于stack exchange,提问作者Himanshu Raj
相关产品推荐
相关产品推荐

