gpt4 book ai didi

c++ - 私有(private)类型说明符是否阻止来自说明符 'understanding' 的对象?

转载 作者:太空狗 更新时间:2023-10-29 20:06:38 24 4
gpt4 key购买 nike

我在获取接受枚举作为返回类型的函数时遇到了问题。在下面的代码中有一个枚举:

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()

但是,我的 header 代码仍然收到“缺少类型说明符”错误。我意识到将我的“枚举状态”声明置于私有(private)访问说明符下可能会有所不同,因此我将其移至 header 代码中的公共(public)访问说明符。有效!但我想解释一下为什么它在私有(private)访问说明符下不起作用。我在其他地方找到的是:

类的对象不能访问私有(private)数据成员。

我对发生的事情的解释是 - 使用私有(private)访问说明符下的枚举类型定义,函数(以及最终调用该函数的对象)不可能访问“理解”我的枚举类型,因此接受它作为返回类型。

但是 - 如果是这样的话,为什么允许我返回在具有相同问题的私有(private)访问说明符下声明的变量?是不是因为它们的类型在其他地方已经被理解,所以程序接受它们没有问题?

最佳答案

状态是在使用后定义的。将状态上移到 get 方法之前。

如果您计划在类之外使用枚举,您需要将枚举移至公共(public)范围。

关于c++ - 私有(private)类型说明符是否阻止来自说明符 'understanding' 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com