问题描述
我有一个类对象数组(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 (将#修改为@)