不能将“this”指针从“const Class(某个类)”转换为“Class &" 错误

来源:互联网 发布:excel2013快速选择数据 编辑:程序博客网 时间:2024/05/23 01:17

下面代码


class Student {public:    const char * GetName();    Student(const Student & o);private:    char name[20];};Student::Student(const Student & o){    const char *p = o.GetName();    int i = 0;    for(;p[i]!='\0'; i++)        name[i]=p[i];    name[i]='\0';}const char* Student::GetName(){    return name;}


使用VS2013编译程序有错误信息

error C2662: “const char *Student::GetName(void)”: 不能将“this”指针从“const Student”转换为“Student &”


const引用对象,会把this指针转化为为const this类型。


解决方法一: 将GetName改为const类型函数

class Student {public:    const char * GetName() const;    Student(const Student & o);private:    char name[20];};Student::Student(const Student & o){    const char *p = o.GetName();    int i = 0;    for(;p[i]!='\0'; i++)        name[i]=p[i];    name[i]='\0';}const char* Student::GetName() const{    return name;}


解决方法二:

直接在内部将const修饰符去掉


Student::Student(const Student & o){    const char *p = (const_cast<Student*>(this))->GetName();    int i = 0;    for(;p[i]!='\0'; i++)        name[i]=p[i];    name[i]='\0';}


0 0
原创粉丝点击