2012-03-14 2 views
0

Я получаю эту ошибку недопустимое преобразование из «сопзЬ символ *» в «символ *» из этого кода:Const ошибка компиляции на метод класса

// 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; 
} 

Может кто-то пожалуйста, помогите мне?

ответ

2

Возвращаемый тип должен быть const char*, а также:

const char* get_name () const; 

Это происходит потому, что в константной функции члена, this указателя становится константным, в результате которого каждый член класса становится Const, что означает name, который объявлен как char[N], становится const char[N] в функции const-члена. const char[N] может преобразовывать только const char*, поэтому вам нужно сделать обратный тип const char*.

0

Вы возвращаете указатель не const. Вы хотите вернуть константный символ:

// in account.h 
const char* get_name () const; 

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

Причина заключается в том, что ваш метод объявлен сопзЬ, но указатель вы возвращение может быть использована, чтобы изменить имя, которое было бы нарушение сопзИте обещание метода.

0

Поскольку get_name является методом const, все члены неявного объекта являются константами в контексте этого метода. Возвращая имя как char *, вы отбрасываете определитель const из имени. Вы можете вернуть const char *.

Смежные вопросы