Arduino oop error

Arduino oop error

本文关键字:error oop Arduino      更新时间:2023-10-16

我正在学习如何用c++编写一个艰巨的程序,但遇到了一个我似乎无法理解的错误。

这是我的代码

class ledControler 
{
  public:
    void ledOn();
    void ledOff();
    void ledStrobe();
    void ledFade();
    ledControler(int);
  private:
    int pinNumber = 0;
};
ledControler::ledControler(int pin)
{
  pinNumber = pin;
  pinMode(pinNumber, OUTPUT);
  ledOn();{
    digitalWrite(pinNumber, HIGH);
  }
  ledOff ();{
    digitalWrite(pinNumber, LOW);
  }
  ledStrobe(int time);{
    digitalWrite(pinNumber, HIGH);
    delay(time);
    digitalWrite(pinNumber, LOW);
    delay(time);
  }
}

以下是错误:

Object_oriented_LED.ino: In constructor 'ledControler::ledControler(int)':
Object_oriented_LED.ino:24:13: error: expected primary-expression before 'int'
Object_oriented_LED.ino:26:11: error: 'time' was not declared in this scope
Error compiling.

您的方法显然是在构造函数内创建的,这是不正确的。每个方法都应该是自己的方法,例如:

void ledControler::ledOn() {
    digitalWrite(pinNumber, HIGH);
}

考虑构造函数中的代码片段:

ledOn();{
    digitalWrite(pinNumber, HIGH);
}

这实际上被视为对函数ledOn的调用,后面是一个包含digitalWrite调用的块,这两个调用都是完全有效的(当然,除了没有定义ledOn函数这一事实之外,如果你能克服编译错误,你肯定会在链接时发现这一点)。

阻止这种情况发生的特殊编译错误是您尝试定义的:

ledStrobe(int time);{ ...

如上所述,这实际上更像是对ledStrobe调用,不幸的是,这不是一个有效的调用,因为您不应该在调用中提供数据类型(通常是ledStrobe(time);)。

这就是第一个错误的来源。第二个原因是,由于您实际上并没有定义接收time参数的函数,因此使用它的代码抱怨它不存在。

正确定义方法应该可以解决这两个问题,这可以通过以下方法来完成:

class ledControler {
    public:
        void ledOn();
        void ledOff();
        void ledStrobe();
        void ledFade();
        ledControler(int);
    private:
        int pinNumber = 0;
};
ledControler::ledControler(int pin) {
    pinNumber = pin;
    pinMode(pinNumber, OUTPUT);
}
void ledControler::ledOn() {
    digitalWrite(pinNumber, HIGH);
}
void ledControler::ledOff () {
    digitalWrite(pinNumber, LOW);
}
void ledControler::ledStrobe(int time) {
    digitalWrite(pinNumber, HIGH);
    delay(time);
    digitalWrite(pinNumber, LOW);
    delay(time);
}