gpt4 book ai didi

c++ - protected 枚举不被视为类型,为什么?

转载 作者:行者123 更新时间:2023-11-28 01:51:42 30 4
gpt4 key购买 nike

我正在编译一些将 emun 定义为 protected 代码,就像这样

class MPU9250
{
protected:
// Set initial input parameters
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
}

我想像这样在我的方法中使用那个枚举,这个方法现在在同一个类中是公共(public)的

void setAccScale(A_scale accScale);

但是编译时报错

../../MPU9250.h: In function 'void initMovementDetected()':
../../MPU9250.h:196:7: error: 'MPU9250::A_scale AFS_8G' is protected
AFS_8G,
^
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);

这是为什么?我可以setAccScale公开吗?

谢谢

class MPU9250
{
protected:
// Set initial input parameters
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
public:
void setAccScale(A_scale accScale);

}

编辑:我发现部分错误,还有一个名为 Ascale 的变量,我将枚举重命名为 A_scale

最佳答案

根据你的错误判断:

../../MPU9250.h: In function 'void initMovementDetected()':
../../MPU9250.h:196:7: error: 'MPU9250::A_scale AFS_8G' is protected AFS_8G,
^
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);

还有你的数据结构:

class MPU9250
{
protected:
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};

private:
void setAccScale(A_Scale);
}

我可以假设您正在尝试从 MPU9250 类外部调用 MPU9250::setAccScale,由于该函数的可访问性,这是不可能的。
另一件事是您正在尝试访问您的 MPU9250protected subtype 的枚举。

对于修复,我建议让您的 A_scale 公开可见或重写它以使用 #define:

解决方案 1:

// define this in some header
#ifndef AFS_2G
# define AFS_2G 0
#endif

#ifndef AFS_4G
# define AFS_4G 1
#endif
// rest of your values ...

//to use this:
mpu9250.SetAccScale(AFS_2G);

解决方案 2:

//declare this enum as public :
class MPU9250
{
public:
enum A_scale
{
AFS_2G = 0,
AFS_4G = 1
// rest of your values
}
};

// to use this:
mpu9250.SetAccScale(MPU9250::A_scale::AFS_2G);

这两种解决方案都需要您创建一个公共(public)函数 SetAccScale,因为我假设您是从 MPU9250 类型之外设置这个比例。

关于c++ - protected 枚举不被视为类型,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42806715/

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