У меня возникла проблема с получением функции для принятия перечисления в качестве возвращаемого типа. В приведенном ниже коде есть перечисление:
Status{ DEAD, WOUNDED, HEALTHY }
и функция с Status в качестве типа возврата:
Status getStatus();
Код заголовка:
class Discovery
{
public:
void doCombat( int );
void setCombatThreshold( int );
void setHealth( int );
void setStatus( int );
Status getStatus();
private:
enum Status { DEAD, WOUNDED, HEALTHY };
Status charStatus;
int yourHealth;
int combatThreshold;
};
Первоначально определение связанной функции читалось:
Status Discovery::getStatus()
{
switch ( charStatus )
{
case DEAD:
return DEAD;
break;
case WOUNDED:
return WOUNDED;
break;
case HEALTHY:
return HEALTHY;
break;
};
}
Я нашел ответ: возвращение enum из функции в базовом классе C ++ , который помог мне понять, что мне действительно нужна первая строка функции для чтения:
Discovery::Status Discovery::getStatus()
Но я все еще получаю сообщение об ошибке «отсутствует указатель типа» для моего кода заголовка. Я понял, что наличие объявления enum Status в приватном спецификаторе доступа может иметь значение, поэтому я переместил его в публичный спецификатор доступа в своем коде заголовка. Это сработало! Но я бы хотел пояснить, почему он не работает под спецификатором частного доступа. То, что мне удалось найти в другом месте:
Объекты класса не могут получить доступ к частным элементам данных.
Моя интерпретация произошедшего - с определением типа enum в приватном спецификаторе доступа, функция (и, в конечном итоге, объект, вызывающий эту функцию) не может получить доступ к «пониманию» моего типа enum и, следовательно, принять это как тип возврата.
Но - если это так, почему мне разрешено возвращать переменные, объявленные в приватном спецификаторе доступа с той же проблемой? Это потому, что их типы уже понятны в других местах, и поэтому программа без проблем принимает их?