我读过这个问题 如何将非静态函数作为回调传递
但我仍然感到困惑,(也许是因为我的英语知识=/(
我正在尝试使用全局实例化对象指针将非静态函数作为另一个函数的参数传递。
请考虑以下示例:Classe_Indice.h
#ifndef CLASSE_INDICE
#define CLASSE_INDICE
#include <Arduino.h>
#include <Programas.h>
class Classe_Indice: public Programas
{
public : int incrementaEvento();
int incrementaFert();
void setNumeroEvento(int numeroEvento);
int getNumeroEvento();
void setNumeroFert(int numeroFert);
int getNumeroFert();
private : int numeroEvento;
int numeroFert;
};
#endif
程序.h
#include <RTClib.h>
#include <Time.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
/*Biblioteca de Lista Encadeada*/
#include <LinkedList.h>
#include <Classe_Indice.h>
#include <Fertilizantes.h>
#include <Eventos.h>
#include <Agendamentos.h>
#include <RecuperaIrriga.h.>
#include <RecuperaFerti.h>
class Programas: public Thread
{
public : bool shouldRun();
void verificaProgramacao();
private : unsigned long tempo;
DateTime now;
};
#endif
主.cpp
#include "Thread.h"
#include "ThreadController.h"
#include <Classe_Indice.h>
#include <Programas.h>
Classe_Indice *indice = new Classe_Indice();
ThreadController cpu;
Programas programacao = Programas();
int main()
{
programacao.setInterval(200);
programacao.onRun((indice->verificaProgramacao()));
cpu.add(&programacao);
}
请注意,在 Classe_Indice.h 中,我正在扩展程序...我这样做是因为我收到以下错误:错误:"类Classe_Indice"没有名为"verificaProgramacao"的成员。然后问题变成了无效使用void表达式。将合成器更改为programacao.onRun((*indice->verificaProgramacao((((,我会得到:错误:void值没有被忽略
,因为它应该是我真的不知道该怎么做。对不起,如果这是一个重复。
注释:::
1、尝试
(*indice).verificaProgramacao();
阿拉伯数字
programacao.onRun(some parameter)
,但是,函数, void verificaProgramacao((; 不是返回类型函数。
我不确定你的意图。我猜您希望在另一个线程中调用/执行verificaProgramacao()
,并尝试将其作为参数传递。实际上,通过以下方式:
programacao.onRun((indice->verificaProgramacao()));
您传递的是执行结果,而不是函数/方法本身。根据类Programas
中的声明,函数返回void
,即什么都没有:
void verificaProgramacao();
所以你有一个错误。
我不知道Thread
类的定义,但我想你应该在 Programas
类中重载 onRun
方法(我猜是从Thread
继承的(,并在重新实现 onRun
时调用verificaProgramacao
,或者传递一个指针,指向verificaProgramacao
类对象的构造函数Classe_Indice
然后传递到 Thread
的构造函数(如果类允许的话((如果有适当的构造函数(。
为了帮助你,我需要更多细节,特别是关于Thread
课和你的实际意图。