C++回文检测代码报size未在当前作用域声明错误咨询
报错原因分析
palindrome.cpp:9:26: error: 'size' was not declared in this scope
这个报错的核心原因是你调用的全局size()函数属于C++17新增的标准库特性,兼容性受限,触发条件具体如下:
std::size定义在<iterator>头文件中,C17版本才正式加入标准,部分在线编译器默认开启C17及以上编译标准,且可能通过其他头文件隐式引入了<iterator>,所以可以正常运行。- 多数命令行编译器(如gcc、g++)默认使用C14及更低的编译标准,既没有引入
<iterator>头文件,也不识别C17的新特性,就会找不到size函数的定义。
全编译环境兼容解决方案
优先推荐第一种方案,无需调整编译参数,所有C++标准环境都可运行:
方案1:替换为string自带的成员size方法
std::string的size()成员方法从C++98开始就存在,是兼容性最好的写法,仅需修改第9行的循环条件即可:
// 把size(num_str)改成num_str.size() for(int x = (num_str.size() - 1); x >= 0; x--){ new_str += num_str[x]; }
方案2:保留全局size调用的适配方法
如果你一定要使用全局size函数,需要同时做两处调整:
- 代码头部新增引入
<iterator>头文件:#include <iterator> - 编译时指定C17及以上标准,比如gcc命令行编译指令改为:
g++ palindrome.cpp -o palindrome -std=c++17
该方案仅适用于支持C17标准的编译器,兼容性弱于方案1。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

