Problema con puntatore a funzione

Buongiorno a tutti.

Ho un problema con il passaggio di un puntatore ad una funzione come parametro.
Ho una classe dove un metodo accetta come parametro un puntatore ad una funzione di un certo tipo, esattamente ritornante void con un solo parametro di tipo uinti8_t

void Classe1::FunzioneA(void (*puntatore)(uint8_t))
{
// codice qui...
}

Ora, se passo alla classe il parametro liscio come indicato nell'esempio sotto, non ho alcun problema

void foo(uint8_t parametro)
{
// codice qui...
}

miaClasse = Classe1();

miaClasse.FunzioneA(foo);

Se invece tento di passare come paramentro alla stessa classe un puntatore ad una funzione contenuta in un altra classe di cui pongo un esempio sotto , mi genera un errore in fase di compilazione:

Classe2::foo(uint8_t parametro)
{
// codice qui...
}

Classe2::FunzioneB()
{

miaClasse1.FunzioneA(foo);
//errore 'Classe1::FunzioneA(<unresolved overloaded function type>)'

}

Ho fatto varie prove, ma non mi piace andare a tastoni, vorrei capire cosa non và.
Sò che può sembrare contorta la mia spiegazione, e mi rendo conto che probabilmente solo io che sto 'sul pezzo' posso capire cosa ho scritto, ma è la forma che mi sembrava più chiara da spiegare.
In tutti i casi posso fornire spiegazioni mirate.
Grazie a tutti in anticipo.

Quando definisci una classe questa non occupa spazio in memoria, per questo non ha senso passare un puntatore a medoto di classe, mentre è possibile passare un puntatore a metodo di oggetto. Quindi prima crei istanza di classe e poi passi il puntatore con object.function, dove object è l'instanza.

Ciao.

Grazie Mauro, il punto è che il problema è lo stesso, avevo già provato:

miaClasse1 = Classe1();
miaClasse2 = Classe2();
miaClasse1.FunzioneA(miaClasse2.foo);

:disappointed_relieved:

Si, il fatto è che il puntatore dichiarato è semplice, invece ne va dichiarato uno specifico per quella classe, ora non ricodo come ho fatto. Provato a cercare su google?

Leggi qua : http://www.ugidotnet.org/Forum/ViewThread/5439
Ringraziamo San google. :smiley:

Prova così. Metti nell'header questo:
class miaClasse1 {
public:
miaClasse1();
tipo_dato funzioneA(void (*)(void), uint8_t parametro);
}

e poi nel file .cpp questo:

tipo_dato miaClasse1::funzioneA(void (*foo)(void), uint8_t parametro) {
....
}

Devi cioè aggiungere il tipo di parametro, cioè un (void), subito dopo il puntatore racchiuso fra parentesi.

leo72:
Devi cioè aggiungere il tipo di parametro, cioè un (void), subito dopo il puntatore racchiuso fra parentesi.

Il punto è che il parametro non è void, ma uint8_t

class classe1
{

public:
	classe1();
	virtual ~classe1();
	void funzioneA(void (*)(uint8_t));
}

Mi riferivo a quando passi come parametro il puntatore alla funzione, forse ho fatto casino con i nomi che hai usato tu.

Sintetizzando brutalmente: puntatore a funzione != puntatore a metodo di oggetto.

Risposta più articolata: