const ошибка компиляции в методе класса - PullRequest
0 голосов
/ 14 марта 2012

Я получаю эту ошибку: недопустимое преобразование из '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;
}

Может кто-нибудь помочь мне?

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Тип возврата также должен быть const char*:

const char* get_name ( ) const;

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

0 голосов
/ 14 марта 2012

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

0 голосов
/ 14 марта 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...