错误:"current_millis"未在此范围内声明

error: 'current_millis' was not declared in this scope

本文关键字:范围内 声明 millis current 错误      更新时间:2023-10-16

您的意思是我的公共类变量没有在范围中声明,我不仅在标题文件中声明了它>:{

IDE Arduino 1.6.12Arduino类型Uno这无关紧要,只需要它来验证

timelycall.cpp

#include "Arduino.h"
#include "timelyCall.h"
timelyCall::timelyCall() {
  current_millis =  millis();
}
timelyCall::~timelyCall() {

这里有错误/

  delete current_millis;
}
void timelyCall::callEvery(void (&f)(), int ms) {
  if (millis() - current_millis > ms) {
    f();
    current_millis = millis();
  }
}
void setCurrentMillis() {
  current_millis = millis();
}

timelycall.h

class timelyCall {
  public:
    timelyCall();
    ~timelyCall();
    unsigned long current_millis;
    void callEvery(void (&f)(), int ms);
  };

FullError

Arduino: 1.6.12 (Windows 7), Board: "Arduino/Genuino Uno"
sketchtimelyCall.cpp: In destructor 'timelyCall::~timelyCall()':
timelyCall.cpp:8: error: type 'long unsigned int' argument given to 'delete', expected pointer
   delete current_millis;
          ^
sketchtimelyCall.cpp: In function 'void setCurrentMillis()':
timelyCall.cpp:19: error: 'current_millis' was not declared in this scope
   current_millis = millis();
   ^
exit status 1
type 'long unsigned int' argument given to 'delete', expected pointer
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

不要在destructor中删除 current_mills。您只能动态删除变量。换句话说,如果使用新对象创建对象,则以1:1的删除将其删除。

至于第二个错误,在timelyCall类中没有setCurrentMills()函数。

您必须修改类定义:

class timelyCall {
  public:
    timelyCall();
    ~timelyCall();
    unsigned long current_millis;
    void setCurrentMills();
    void callEvery(void (&f)(), int ms);
  };

然后将功能定义更改为 void timelyCall::setCurrentMills()

也是传递要分配的值函数set的标准。因此,将将此签名更改为void setCurrentMills(const unsigned long& mills);的未来修改确实是有益的,而不是将Funcion mills()的返回值分配给current_mills,而是将具有此函数的返回值的设置器,例如此功能,例如此 object.setCurrentMills(mills());

在Destructor中不要删除current_millis,仅删除使用new创建的内容。