我在使用函数接受枚举作为返回类型时遇到了问题。在下面的代码中有一个枚举:
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;
};
}
我找到了这个答案:returning enum from function in C++ base class帮助我意识到我真的需要该函数的第一行来阅读:
Discovery::Status Discovery::getStatus()
但是,我的标题代码仍然收到“缺少类型说明符”错误。我意识到在私有访问说明符下使用我的'枚举状态'声明可能会有所不同,所以我将它移动到我的标题代码中的公共访问说明符。有效!但我想解释为什么它不能在私有访问说明符下工作。我在其他地方找到的是:
该类的对象无法访问私有数据成员。
我对发生的事情的解释 - 使用私有访问说明符下的枚举类型定义,函数(最终调用该函数的对象)无法访问“理解”我的枚举类型,因此接受它作为一种返回类型。
但是 - 如果是这种情况,为什么我允许返回在私有访问说明符下声明的变量具有相同的问题?是因为他们的类型已经在其他地方被理解了,所以程序接受它们没有问题吗?
答案 0 :(得分:4)
状态在使用后定义。在get方法之前向上移动状态。
如果您打算在课堂外使用枚举,则需要将枚举移至公共范围。
答案 1 :(得分:4)
您需要更改声明的顺序。由于您在声明之前使用Status,因此它会给您一个错误。你必须移动状态声明。
class Discovery
{
private:
enum Status { DEAD, WOUNDED, HEALTHY };
public:
void doCombat( int );
void setCombatThreshold( int );
void setHealth( int );
void setStatus( int );
Status getStatus();
private:
Status charStatus;
int yourHealth;
int combatThreshold;
};