c调试问题:对象包含与成员函数不兼容的类型限定符。
今天在调试C自定义String代码的时候,遇到了一个问题,在编译的时候报告了一个错误:对象包含了一个与成员函数不兼容的类型限定符。
先看看代码:
类字符串{//自定义字符串类
公众号:
字符串(常量字符*
{//构造函数
if(!s){ 0
len=0;
str=新字符[1];
str[0]=0;
}
else {
len=strlen(s);
str=新字符[len 1];
strcpy(str,s);
}
}
~ String(){ delete[]Str;len=0;}//析构函数
int size(){ return len;}//字符数
字符串运算符=(常量字符串)
{//复制构造函数
if (this==s)返回* this
删除[]字符串;
len=s . size();
str=新字符[len 1];
strcpy(str,s . c _ str());
返回*这个;
}
const char *c_str()
{//获取C风格字符串
返回字符串;
}
私人:
char * str
int len
};
int main()
{
字符串名词(' book ');
字符串动词=名词;
cout noun . c _ str()endl;
cout动词. c _ str()endl;
返回0;
}
来自MSVC编译器的错误消息:
E1086对象包含与成员函数“String:size”不兼容的类型限定符
E1086对象包含与成员函数“String:c _ str”不兼容的类型限定符
问题在哪里?
问题似乎是在运算符=
我们知道,operator=左侧表达式类的内部成员会被修改,但右侧表达式类的内部成员不会被修改,所以只能调用等号右侧对象的const-limited函数(不是const的返回值),强制对象的内部状态不能被修改。
解决方案:向字符串String:size和字符串String:c _ str函数添加常量限定符:
类别字符串{ 0
公众号:
int size()const { return len;}
字符串运算符=(常量字符串)
{
if (this==s)返回* this
删除[]字符串;
len=s . size();
str=新字符[len 1];
strcpy(str,s . c _ str());
返回*这个;
}
const char *c_str() const
{
返回字符串;
}
.
};
.
总结:
在复制构造函数中,只能调用当前类的const限定符函数;
Const限定的成员函数只能调用const限定的成员函数,不能调用非const限定的成员函数,即使对象的内部状态没有被修改;
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/88699.html