2016-06-24 7 views
0
class Stepper 
{ 
    private: 
    int enable; 
    int direction; 
    int speed; 
    static int turretCounter; 
    public: 
    Stepper(int en, int dir) 
    { 
     enable = en; 
     direction = dir; 
     pinMode(enable,OUTPUT); 
     pinMode(direction,OUTPUT); 
     pinMode(4,OUTPUT);  
    } 
    void Stop() 
    { 
     digitalWrite(enable,1); 
     Timer1.detachInterrupt(); 
     Timer1.stop(); 
    } 
    static void IncrementCounter() 
    { 
     turretCounter++; 
    } 
    //your step pin must be 4 due to limitations on static vars and methods 
    static void Step() 
    { 
     digitalWrite(4,0); 
     delayMicroseconds(1); 
     digitalWrite(4,1); 
     IncrementCounter(); 
    } 
    void SetSpeed(int Speed) 
    { 
     speed = Speed; 
    } 
    void Run(int seconds) 
    { 
     digitalWrite(enable,0); 
     Timer1.attachInterrupt(Step); 
     Timer1.initialize(speed); 
    } 
    int GetCounter() 
    { 
     return turretCounter; 
    } 
    void SetDirection(int dir) 
    { 
     digitalWrite(direction,dir); 
    } 
    int GetSpeed() 
    { 
     return speed; 
    } 
}; 

inkrementiert werden. Ich möchte Sie auf die statische Methode Step() und die statische Methode IncrementCounter() aufmerksam machen. Ich habe versucht, die Variable innerhalb der Step() - Funktion inkrementieren, aber ich bekomme immer nur "Fehlerkompilierung für Board Arudino Nano". Ich habe versucht, IncrementCounter() direkt innerhalb der Step() Methode aufzurufen, und ich bekomme den Fehler "kann Klassenmethode ohne Objekt nicht aufrufen". Ich bekomme diesen Fehler von Step() -Methode.Statische Variable kann nicht innerhalb der statischen Klassenfunktion

+3

* kann keine Klassenmethode ohne Objekt aufrufen * sollte darauf hinweisen, wo im Code dieser Fehler herkommt. Was ist dieser Code? – NathanOliver

+0

Nun, dieser Fehler kommt von der Step() Methode. @NathanOliver –

Antwort

1

Versuchen turretCounter irgendwo (vorzugsweise in einer .cpp/.cxx/.C Datei) wie folgt definieren:

int Stepper::turretCounter = 0; 

Wenn dies Ihr Problem löst, dann wahrscheinlich haben Sie eine informative Fehlermeldung übersehen und veröffentlichten nur die letzten Zeile Ihrer Compiler-Ausgabe. In Zukunft sollten Sie mehr auf die Kompilierungsfehler achten und es sich zur Gewohnheit machen, sie in der Reihenfolge zu untersuchen, in der sie in der Ausgabe erscheinen (da spätere Fehler einfach das Ergebnis früherer Fehler sein können).