C++调用reverse(char*&)报无匹配函数错误(base4转base2场景)
问题修复方案
报错核心原因
你调用reverse报无匹配函数,根本原因是参数传错了:
- 标准库的
std::reverse不存在单参数重载,它的设计逻辑是接收两个迭代器,圈定需要反转的连续元素范围(遵循左闭右开规则,即[起点, 终点)) - 你现在只传了字符数组名(退化为char*的起始地址),根本没给结束位置,编译器自然找不到能匹配这个调用的函数版本。
直接改法
调整reverse的调用参数
你代码里的变量i刚好记录了所有已写入的有效字符总长度(正/负数字符长度+可能存在的负号长度),而字符串结束符\0的位置就在s[i]处,刚好能当反转区间的终点。把原来的reverse(s);替换成:reverse(s, s + i);举个实际验证的例子:当输入n=-123时,执行完所有字符写入、还没调用reverse时,数组里存的内容是
['3','2','1','-', '\0'];用上面的参数调用reverse后,有效区间的字符会被翻转为['-','1','2','3'],配合固定位置的\0,最终生成的字符串就是完全正确的"-123"。
这里要注意别手滑把终点写成s + i + 1,不然会把字符串结束符\0也翻到最前面,直接把字符串结构搞坏。删掉没用的错头文件
你代码里引入的#include <bits.h>根本不是C++标准库头,现在的逻辑也根本没用到位运算相关功能,直接删掉这行就行,省得额外出编译错。
内容的提问来源于stack exchange,提问作者jedraszek
相关产品推荐
相关产品推荐

