受保护的枚举不被视为类型,为什么?
Protected enum not seen as type, why?
我正在编译一些将 emun 定义为受保护的代码,就像这样
class MPU9250
{
protected:
// Set initial input parameters
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
}
我想像这样在我的方法中使用那个枚举,这个方法现在 public 在同一个 class
中
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
public吗?
谢谢
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
如果您要在该范围之外使用枚举,我认为您需要 public class。此外,您的函数中需要一个参数并且缺少分号。我不确定你为什么要在 class 中声明一个函数?但这是您的代码,其中包含这些更正。希望我能帮到你。
#include "stdafx.h"
#include <iostream>
class MPU9250
{
public:
// Set initial input parameters
enum Ascale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
void setAccScale(Ascale accScale) {
std::cout << accScale << std::endl;
} // function needs argument
};// missing semi-colon
int main() {
return 0;
}
根据您的错误判断:
../../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
class 外部调用 MPU9250::setAccScale
,由于该函数的可访问性,这是不可能的。
另一件事是您正在尝试访问 MPU9250
的 protected subtype
枚举。
对于修复,我建议让您的 A_scale
public 可见或重写它以使用 #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);
方案二:
//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
类型之外设置这个比例的。
是的,如果您从外部使用 MPU9250::A_scale
或派生 class,请制作 A_scale public.
但由于 void setAccScale(A_scale accScale)
已经是私有的,因此不存在需要 public 仅使用 A_scale 的情况。你能准确地显示它被调用的地方吗,更多的上下文:
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);
我正在编译一些将 emun 定义为受保护的代码,就像这样
class MPU9250
{
protected:
// Set initial input parameters
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
}
我想像这样在我的方法中使用那个枚举,这个方法现在 public 在同一个 class
中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
public吗?
谢谢
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
如果您要在该范围之外使用枚举,我认为您需要 public class。此外,您的函数中需要一个参数并且缺少分号。我不确定你为什么要在 class 中声明一个函数?但这是您的代码,其中包含这些更正。希望我能帮到你。
#include "stdafx.h"
#include <iostream>
class MPU9250
{
public:
// Set initial input parameters
enum Ascale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
void setAccScale(Ascale accScale) {
std::cout << accScale << std::endl;
} // function needs argument
};// missing semi-colon
int main() {
return 0;
}
根据您的错误判断:
../../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
class 外部调用 MPU9250::setAccScale
,由于该函数的可访问性,这是不可能的。
另一件事是您正在尝试访问 MPU9250
的 protected subtype
枚举。
对于修复,我建议让您的 A_scale
public 可见或重写它以使用 #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);
方案二:
//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
类型之外设置这个比例的。
是的,如果您从外部使用 MPU9250::A_scale
或派生 class,请制作 A_scale public.
但由于 void setAccScale(A_scale accScale)
已经是私有的,因此不存在需要 public 仅使用 A_scale 的情况。你能准确地显示它被调用的地方吗,更多的上下文:
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);