2016-09-05 3 views
0

내가 원하는 것은 간단합니다. Arduino : 클래스의 정적 메서드에서 정적 변수에 액세스

  • 인스턴스화없이 정적 클래스 (바람직 싱글)을 사용하면 정전기 세터/게터 내에 일부 정적 클래스 변수를 설정

    • .

    매우 쉽게 보이지만 유선 인터넷에 어떤 예도 찾을 수 없습니다. 내가주는 것은 무엇이든지; `Test :: _ pin '오류에 대한 정의되지 않은 참조! 컴파일하지 않습니다.

    내 클래스 헤더 Test.h :

    #ifndef Test_h 
    #define Test_h 
    #include "Arduino.h" 
    
    class Test 
    { 
        public: 
        Test(byte pin); 
        static byte getPin(); 
        static byte _pin;  
    
        private: 
    
    }; 
    #endif 
    

    내 클래스 코드 Test.cpp에 :

    StaticClassTest.ino이
    #include "Test.h" 
    
    Test::Test (byte pin) { 
        _pin = pin; 
    } 
    
    byte Test::getPin(){ 
        return _pin; 
    } 
    

    :

    #include "Test.h" 
    
    void setup() 
    { 
        Test(5); 
        Serial.begin(9600); 
        Serial.println(Test::getPin(), DEC); 
    } 
    void loop() { } 
    

    이미 액세스 시도했습니다 _ 핀 :

    byte Test::getPin(){ 
        return Test::_pin; // did NOT work, reference error 
    } 
    

    이상적으로 _pin은 private이어야하며 getPin(); 하지만이 변수를 설정하거나 가져 오는 것은 불가능하기 때문에 더 많은 기회를 갖기 위해 공개했습니다.

    이 간단한 컨텍스트에서 잘못된 점은 무엇입니까?

    이 클래스에서이 변수를 어떻게 설정하거나 가져올 수 있습니까? Test.cpp 추가에

  • 답변

    1

    :

    byte Test::_pin; 
    

    와 작동합니다.

    단지 클래스 내부의 선언이므로 정의를 추가하여이 변수를위한 공간을 만들어야합니다.

    similar Q&A on SO의 정보와 all possibilities on cppreference.com

    +0

    는 당신이 일을 Test.cpp에이 두 번째 정의와 @KIIV 감사합니다! 나는 아직도 놀랍고 혼란 스럽다. 왜 두 번째 메모리 할당이 필요한가? 이 예외로 인해 약 6 시간을 보냈습니다. -/다시, 감사합니다! 건배, – Trevor

    관련 문제