我讀過這個問題How do you pass a non static function as callback錯誤在傳遞一個非靜態函數的參數
不過呢我還是一頭霧水,(也許是因爲我的英語知識= /)
我想使用全局實例化對象指針傳遞非靜態函數作爲另一個函數的參數。
請考慮例子: 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
Programas.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
Main.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中,我擴展了Programas ...我做了這個,因爲我得到以下錯誤:錯誤:'class Classe_Indice'沒有名爲'verificaProgramacao'的成員。然後問題改爲無效使用void表達式 ..將合成器更改爲programacao.onRun((indice-> verificaProgramacao())),我會得到:錯誤:void值不會被忽略,因爲它應該是
我真的不知道如何處理這個問題。對不起,如果這是一個反正無論如何。
'onRun'的聲明/定義是什麼?它沒有出現在你的代碼中。但是'indice-> verificaProgramacao()'已經調用函數,它不會將其作爲參數 – UnholySheep
在成員函數指針上讀取。 – AndyG