首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么g++连使用C++11都认不出stoi?

为什么g++连使用C++11都认不出stoi?
EN

Stack Overflow用户
提问于 2022-02-27 14:42:42
回答 1查看 41关注 0票数 1

我在C++11中有这样的函数:

代码语言:javascript
运行
复制
bool ccc(const string cc) {
    
vector<string> digits;
    
int aux;
    
for(int n = 0; n < cc.length(); ++n) {
    
digits.push_back(to_string(cc[n])); }
    
for(int s = 1; s < digits.size(); s += 2) {
    
aux = stoi(digits[s]);
    
aux *= 2;
    
digits[s] = to_string(aux);
    
aux = 0;
    
for(int f = 0; f < digits[s].length(); ++f) {
    
aux += stoi(digits[s][f]); }
    
digits[s] = to_string(aux);
    
aux = 0; }
    
for(int b = 0; b < digits.size(); ++b) {
    
aux += stoi(digits[b]); }
    
aux *= 9;
    
aux %= 10;
    
return (aux == 0); }

使用g++使用-std=c++11标志进行编译时,我会得到这个错误:

代码语言:javascript
运行
复制
crecarche.cpp: In function ‘bool ccc(std::string)’:
    
crecarche.cpp:18:12: error: no matching function for call to ‘stoi(__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type&)’
    
18 | aux += stoi(digits[s][f]); }
        |        ~~~~^~~~~~~~~~~~~~

但是之后我使用了stoi函数,没有发现该行有任何错误。

为什么编译器会抛给我这个错误,我如何修复它?

EN

Stack Overflow用户

发布于 2022-02-27 14:55:43

错误消息告诉您,传递给stoi的参数类型为

代码语言:javascript
运行
复制
__gnu_cxx::__alloc_traits<std::allocator<char>, char>::value_type&

这是一种奇特的表达char&的方式。之所以会出现这种情况,是因为digits[s]已经是string&类型,并且订阅它会给您提供一个char&

我不清楚你想做什么。也许您需要删除额外的下标,或者使用digits[s][f] - '0'来计算数字值。C++要求十进制数字由后续的代码点表示,因此即使在理论实现中也是如此,这些实现不是基于Unicode的ISO646子集。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71285683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档