Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 受保护的枚举不被视为类型,为什么?_C++_Arduino_Protected - Fatal编程技术网

C++ 受保护的枚举不被视为类型,为什么?

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

我正在编译一些将emun定义为受保护的代码,如下所示

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
,这就是出现错误的原因。我已经检查过了,一切正常。。。