类方法上的const编译错误

const compile error on class method

本文关键字:编译 错误 const 类方法      更新时间:2023-10-16

我收到此错误,此代码从"const char*"到"char*"的转换无效:

// in account.h
struct account {
    char* get_name ( ) const;
    char name[MAX_NAME_SIZE+1];
};
//in account.cxx
char* account::get_name ( ) const
{
    return name;
}

有人能帮帮我吗?

返回类型也应为const char*

const char* get_name ( ) const;

这是因为在const成员函数中,this指针变成了const,因此类的每个成员都变成const,这意味着被声明为char[N]name变成了常量成员函数中的const char[N]const char[N]只能转换为const char*,因此需要使返回类型为const char*

您返回的是一个非常量指针。您想要返回一个常量字符:

// in account.h
const char* get_name ( ) const;
//in account.cxx
const char* account::get_name ( ) const
{
    return name;
}

原因是您的方法被声明为const,但您返回的指针可能被用来修改名称,这将违反该方法的const承诺。

由于get_name是一个const方法,因此隐式对象的所有成员在该方法的上下文中都是const。通过将name返回为char*,您将从name中删除const限定符。您可以返回const char*。