微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

arduino C++ 类对象中的函数指针不起作用

如何解决arduino C++ 类对象中的函数指针不起作用

我有一个类对象数组(TesterClass)。我能够访问它们并正确调用对象中的打印函数。我正在向对象传递一个函数指针,它也调用打印函数。当我尝试“运行”该函数时,没有任何反应。我想弄清楚我做错了什么。

感谢您的帮助。 雅培

这是测试 .ino

#include "Tester.h"
const int size = 5;
typedef bool (*fPointer)(const TesterClass* tester);
TesterClass testers[size];
unsigned long myMillis;

void ListTesters() {
    Serial.println(" Lists of all ----");
    for (int i = 0; i < size; i++) {
        testers[i].PrintMe();
    }
}

bool TestFunction(TesterClass* tester) {
    tester->PrintMe();
}

void setup()
{
    //Open serial port at 115200 baud
    Serial.begin(115200);
    //Wait until the serial port has opened
    while (!Serial) delay(1);

    Serial.println("Set Tester Time");
    for (int i = 0; i < size; i++) {
        TesterClass::fPointer pointer = TestFunction;
        testers[i].SetMillis(pointer);
        testers[i].PrintMe();
        delay (1000);
    }
    Serial.println("Show Testers");

    for (int i = 0; i < size; i++) {
        testers[i].PrintMe();
        Serial.println("----");
        testers[i].RunMe(&testers[i]);
    }
    Serial.println("display Complete");
}

void loop()
{
    delay(5000);
}

这是测试类

class TesterClass
{
 public:
     typedef bool (*fPointer)(TesterClass* tester); //const TesterClass* task

    TesterClass();
    void SetMillis(fPointer fPointer);
    void PrintMe();
    void RunMe(TesterClass* tester);
 private:
     fPointer _fPointer = NULL;
     unsigned long _millis;
     bool _inUse = false;
};

#include "Tester.h"

 TesterClass::TesterClass()
{
     _millis = millis();
}

 void TesterClass::SetMillis(TesterClass::fPointer fPointer) {
     TesterClass::_millis = millis();
     TesterClass::_inUse = true;
     TesterClass::_fPointer = fPointer;
 }

 void TesterClass::RunMe(TesterClass* tester) {
     TesterClass::_fPointer;
 }
 void TesterClass::PrintMe() {
     String used = "False - ";
     if (_inUse) used = "True - ";
     Serial.print(used);
     String empty = "Has Pointer - ";
     if (_fPointer == NULL) empty = "Null Pointer - ";
     Serial.print(empty);
     Serial.println(_millis);
}
TesterClass Tester;

输出

Set Tester Time
True - Has Pointer - 0
True - Has Pointer - 1000
True - Has Pointer - 2000
True - Has Pointer - 3001
True - Has Pointer - 4001
Show Testers
True - Has Pointer - 0
----
True - Has Pointer - 1000
----
True - Has Pointer - 2000
----
True - Has Pointer - 3001
----
True - Has Pointer - 4001
----
display Complete

每个 ---- 下方的线应与其上方的线相同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。