如何修复C++ stoi调用报错及CodeBlocks下stoi不存在于当前作用域问题
问题排查与解决方案
1 首要问题:代码传参类型错误
stoi的功能是将字符串类型的内容转换为整数,要求传入的参数必须是std::string或std::string_view类型,你当前的测试代码给stoi传了int类型的变量,属于参数类型不匹配,必然触发编译报错。
如果你是要测试stoi功能,正确的测试代码如下:
#include <iostream> #include <string> using namespace std; int main() { string test = "34"; // 修改为字符串类型的变量 cout << stoi(test); return 0; }
如果你原本的需求是把整数转换为字符串输出,那应该调用to_string(test),而非stoi。
2 排除代码问题后仍报作用域错误的解决步骤
如果确认传入的是字符串类型还是出现stoi() does not exist in the current scope报错,按以下步骤排查:
- 确认编译配置生效:保存修改的代码后,点击Code::Blocks顶部菜单「构建」→「重新构建」,清空之前的编译缓存,避免旧缓存导致的报错
- 确认编译器版本支持:部分老旧的MinGW 4.8版本对C++11标准的
stoi实现存在缺陷,可升级gcc到5.x及以上版本解决 - 临时替代方案:如果不想升级编译器,可以用
atoi替代stoi,写法为atoi(你的字符串变量.c_str()),二者功能基本一致,区别仅为atoi转换失败时返回0,stoi会抛出异常
内容的提问来源于stack exchange,提问作者stronkbison
相关产品推荐
相关产品推荐

