无法在静态类函数中增加静态变量

时间:2016-06-24 15:28:37

标签: c++ class object static arduino

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

我想提请你注意静态的Step()方法和静态的IncrementCounter()方法。我尝试在Step()函数中递增变量,但我总是得到"错误编译板Arudino Nano"。我试图直接在Step()方法中调用IncrementCounter(),并且我得到了#34;不能在没有对象的情况下调用类方法"错误。我从Step()方法得到了这个错误。

1 个答案:

答案 0 :(得分:1)

尝试在某处(最好在turretCounter / .cpp / .cxx文件中)定义.C,如下所示:

int Stepper::turretCounter = 0;

如果这可以解决您的问题,那么您可能忽略了更具信息性的错误消息,并仅发布了编译器输出的最后一行。将来要更加注意编译错误,并习惯按照它们在输出中出现的顺序来研究它们(因为后来的错误可能只是早期错误的结果)。