我在获取一个接受枚举作为返回类型的函数时遇到了问题。在下面的代码中有一个枚举:
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;
};
}
我找到了这个答案:从 C++ 基类中的函数返回枚举,这帮助我意识到我真的需要读取函数的第一行:
Discovery::Status Discovery::getStatus()
但是,我的标头代码仍然收到“缺少类型说明符”错误。我意识到在私有访问说明符下拥有我的“枚举状态”声明可能会有所不同,因此我将其移至我的标头代码中的公共访问说明符。有效!但我想解释一下为什么它在私有访问说明符下不起作用。我设法在其他地方找到的是:
类的对象不能访问私有数据成员。
我对发生的事情的解释是——使用私有访问说明符下的枚举类型定义,函数(以及最终调用该函数的对象)不可能访问“理解”我的枚举类型,因此接受它作为返回类型。
但是 - 如果是这样的话,为什么我可以返回在私有访问说明符下声明的变量,但存在同样的问题?是不是因为它们的类型在其他地方已经被理解了,所以程序接受它们没有问题?