2017-03-15 6 views
0

나는 이런 내 방법이 열거 형을 사용하고 싶습니다이보호 된 enum이 유형으로 보이지 않습니다. 이유가 무엇입니까?

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

처럼, 보호 등의 emun을 정의하는 몇 가지 코드를 컴파일하고,이 방법은 같은 클래스 내에서 지금 공개

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

} 

편집 : 나는 당신이 있다면 공용 클래스를 필요가 있다고 생각 나는 A_scale

+0

이 오류가 발생하지 않습니까? – Morgoth

+0

컴파일러로'gcc-arm-none-eabi/5_2-2015q4/bin/arm-none-eabi-g ++'를 사용하는 위의 코드를 사용합니다. – ndarkness

+0

void setAccScale (MPU9250 :: Ascale)을 사용해 보았습니까? –

답변

1

당신의 오류로 판단 :

../../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); 

두 솔루션 모두에서 요 필요합니다. 당신이 MPU9250 타입의 외부에서이 스케일을 설정하고 있다고 가정하기 때문에 공개 기능을 만들기 위해서는 SetAccScale을 사용하십시오.

1

에 열거 이름, 변수뿐만 아니라 Ascale라는 있었다, 부분적으로 오류를 발견 그 범위 밖에서 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; 
} 
0

예 또는이 파생 된 클래스 외부에서 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);