我是靠谱客的博主 忐忑朋友,最近开发中收集的这篇文章主要介绍no match for 'operator+' (operand types are 'basic_string' and 'int'),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前在写代码的时候都没注意过这个问题,我想将一个数字变成字符接在一个字符串后面,如下所示:

int main()
{
string res = "doudou";
res = res + ('0' + 1);
cout << res << endl;
return 0;
}

但是编译发生错误:no match for 'operator+' (operand types are 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' and 'int'),就是说并没有重载basic_string<char>和int的+

这样写的话,编译器并不会把括号里的自动变成字符 '1' 追加在res后面,而是会把括号里的表达式变成int类型的49,(字符 '0' 的ASCII码是 48),相当于是一个字符串和一个整数在进行相加操作,没有任何意义,所以编译报错

要想编译器把括号里的表达式作为一个字符去看待,需要进行类型转换,让编译器知道自己的意图。

如下所示:

int main()
{
string res = "doudou";
res = res + (char)('0' + 1);
cout << res << endl;
return 0;
}

强制类型转换,让编译器将int类型的 49 看做字符  '1',然后进行相加操作,此时就没有问题了,

或者定义一个临时变量,这样看起来更自然一些

int main()
{
string res = "doudou";
char tmp = '0' + 1;
res = res + tmp;
cout << res << endl;
return 0;
}

运行结果如下所示:就是将字符 '1'追加在 字符串"doudou"后面

最后

以上就是忐忑朋友为你收集整理的no match for 'operator+' (operand types are 'basic_string' and 'int')的全部内容,希望文章能够帮你解决no match for 'operator+' (operand types are 'basic_string' and 'int')所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部