1、无法将参数“const char[]”转换成“char*”
参考文章
高版本的vs中会出现这个问题,我的vs版本是2019.
解决方案:
在【项目属性】窗口中的【C/C++】-【语言】-【符合模式】-改为【否】。
2、关于C++中重载后置++和重载流插入运算符
参考链接
重载流插入原代码情况如下:
ostream& operator << (ostream& o, Point& p) {
o << '(' << p._x << ", " << p._y << ')';
return o;
}
main函数使用报错:
cout << p++ << endl;
没有与这些操作数匹配的“<<"运算符。
解决办法:
重载流插入代码改为:
ostream& operator << (ostream& o, const Point& p) {
o << '(' << p._x << ", " << p._y << ')';
return o;
}
分析原因:
p++是一个表达式,返回的是一个临时值,这个类型不可引用。
引用正常不能引用右值,C++11之后的右值引用&&除外,加了const就可以引用右值了,例如const int &a = 1是正常的,而int &a = 1是非法的
3、溢出报错
Line 1061: Char 9: runtime error: addition of unsigned offset to 0x7ffc7c7f77a0 overflowed to 0x
分析原因:
下标可能溢出或者小于0。
解决办法(举例):
int num=s.length();
for(int i=0;i<num;i++){
switch(s[i]){
case 'A':
if(s[i-1] != 'B')
num ++;
break;
}
}
此处会报错,可以更改为:
int num=s.length();
for(int i=0;i<num;i++){
switch(s[i]){
case 'A':
if(i>0 && s[i-1] != 'B')
num ++;
break;
}
}
4、expression is not assignable
分析原因:
可能是判断的时候“==”变成“=”了。
5、string类型赋值报错
原代码:
char c = "a";
stirng str="";
for(int j=0;j<5;j++){
str[j]=c;
}
分析原因:
size无法自主扩展
解决办法:
char c = "a";
stirng str="";
for(int j=0;j<5;j++){
str=str+c;
}