不能在静态类函数中增加静态变量

Cannot increment static variable within static class function

本文关键字:静态 增加 变量 静态类 不能 类函数      更新时间:2023-10-16
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(),我得到了"没有对象就不能调用类方法"的错误。我从Step()方法中得到这个错误。

尝试在某个地方(最好是在.cpp/.cxx/.C文件中)定义turretCounter:

int Stepper::turretCounter = 0;

如果这解决了你的问题,那么你可能忽略了一个更有信息量的错误消息,只发布了编译器输出的最后一行。今后要更加注意编译错误,并养成按照它们在输出中出现的顺序来研究它们的习惯(因为后面的错误可能只是前面错误的结果)。