C++ 受保护的枚举不被视为类型,为什么?
我正在编译一些将emun定义为受保护的代码,如下所示C++ 受保护的枚举不被视为类型,为什么?,c++,arduino,protected,C++,Arduino,Protected,我正在编译一些将emun定义为受保护的代码,如下所示 class MPU9250 { protected: // Set initial input parameters enum A_scale { AFS_2G = 0, AFS_4G, AFS_8G, AFS_16G }; } 我想像这样在我的方法中使用这个枚举,这个方法现在在同一个类中是公共的 void setAccScale(A_scale accSc
class MPU9250
{
protected:
// Set initial input parameters
enum A_scale
{
AFS_2G = 0,
AFS_4G,
AFS_8G,
AFS_16G
};
}
我想像这样在我的方法中使用这个枚举,这个方法现在在同一个类中是公共的
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
如果要在该范围之外使用枚举,我想您需要一个公共类。此外,函数中需要一个参数,并且缺少分号。我不知道为什么要在类中声明函数?但这是你的代码和这些更正。希望我能帮助你
#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;
}
#包括“stdafx.h”
#包括
类MPU9250
{
公众:
//设置初始输入参数
子囊数
{
AFS_2G=0,
AFS_4G,
AFS_8G,
AFS_16G
};
void setAccScale(Ascale accScale){
std::cout如果要在该范围之外使用enum,我认为您需要一个公共类。此外,您的函数中需要一个参数,并且缺少分号。我不确定您为什么要在类中声明函数?但这是您的代码和这些更正。希望我能够帮助您
#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;
}
#包括“stdafx.h”
#包括
类MPU9250
{
公众:
//设置初始输入参数
子囊数
{
AFS_2G=0,
AFS_4G,
AFS_8G,
AFS_16G
};
void setAccScale(Ascale accScale){
从你的错误判断:
../../MPU9250.h:在函数“void initMovementDetected()”中:
../../MPU9250.h:196:7:错误:“MPU9250::A_scale AFS_8G”受保护
AFS_8G,
^
../../nRF52.cpp:49:31:错误:在此上下文中
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
,由于该函数的可访问性,这是不可能的。
另一件事是,您正在尝试访问属于MPU9250
的受保护子类型的枚举
对于修复,我建议将您的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);
//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);
解决方案2:
// 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);
这两种解决方案都要求您创建一个公共函数SetAccScale
,因为我假设您是从MPU9250
类型外部设置此比例。根据您的错误判断:
../../MPU9250.h:在函数“void initMovementDetected()”中:
../../MPU9250.h:196:7:错误:“MPU9250::A_scale AFS_8G”受保护
AFS_8G,
^
../../nRF52.cpp:49:31:错误:在此上下文中
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
,由于该函数的可访问性,这是不可能的。
另一件事是,您正在尝试访问属于MPU9250
的受保护子类型的枚举
对于修复,我建议将您的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);
//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);
解决方案2:
// 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);
这两种解决方案都要求您创建一个公共函数SetAccScale
,因为我假设您是从MPU9250
类型外部设置此比例。是的,如果您是从该类或派生类外部使用MPU9250::a_scale
,请将a_scale设置为公共
但是由于void setAccScale(A_scale accScale)
已经是私有的,因此不存在需要公开使用A_scale的情况。您能否准确地显示它的调用位置,以及更多上下文:
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);
是的,如果您使用的是来自此类或派生类之外的MPU9250::A_scale
,请将A_scale公开
但是由于void setAccScale(A_scale accScale)
已经是私有的,因此不存在需要公开使用A_scale的情况。您能否准确地显示它的调用位置,以及更多上下文:
../../nRF52.cpp:49:31: error: within this context
mpu9250.setAccScale(MPU9250::AFS_8G);
我没有得到一个错误?我得到了,上面的一个使用了gcc arm none-eabi/5_2-2015q4/bin/arm-none-eabi-g++
作为编译器您是否尝试过void setAccScale(MPU9250::Ascale)
?@m.rogalski是的,我得到了这个。/../MPU9250.h:在函数'void initMovementDetected()“:../../MPU9250.h:196:7:错误:“MPU9250::A_scale AFS_8G”受保护AFS_8G,^.././nRF52.cpp:49:31:错误:在此上下文中MPU9250.setAccScale(MPU9250::AFS_8G)
我想你想公开使用这个枚举Ascale,这就是为什么会出现错误。我已经检查过了,一切正常…我没有收到错误?我收到了,上面的一个使用gcc arm none eabi/5_2-2015q4/bin/arm-none-eabi-g++
作为编译器你尝试过void setAccScale(MPU9250::Ascale)
?@m.rogalski是的,我得到了这个。/../MPU9250.h:在函数'void initMovementDetected()':../../MPU9250.h:196:7:错误:'MPU9250::A_scale AFS_8G'受AFS_8G保护,^..//nRF52.cpp:49:31:错误:在此上下文中MPU9250.setAccScale(MPU9250::AFS_8G)
我想你想公开使用这个枚举Ascale
,这就是出现错误的原因。我已经检查过了,一切正常。。。