2017-05-05 8 views
-8

ich C++ Klasse importieren versuchen, einig C Code, der sehr kompliziert ist und ich nicht verstehe (bitte versuchen Sie es mich nicht zu töten, ich weiß nicht, C++einen Klasse Mitglied Funktionszeiger Passing

)

Innerhalb einer cpp Klasse I haben Mitglieder:

void Bluetooth::nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length) 
{...} 

void Bluetooth::services_init(void) 
{ 

    ble_nus_init_t nus_init; 
    nus_init.data_handler = nus_data_handler; //********* problem is here ! 
} 

Also, wenn diese zwei Funktionen in der gleichen C-Datei sind, its ok, aber wenn sie Mitglieder einer C++ cla s gibt es einen Fehler, dass ich diese Funktion nicht von einer Art in eine andere konvertieren kann.

Ich mache offensichtlich etwas Dummes, wie man es korrigiert?

+1

Dies ist eine richtige Frage meiner Meinung nach (Nicht mit den richtigen Bedingungen ausgedrückt). –

+2

@ AlejandroMontilla Nein, ist es nicht. Wo ist MCVE? – LogicStuff

+0

Sie haben den Kontext, in dem Sie versuchen, * dieses * zu verwenden, nicht angezeigt. Memberfunktionen einer C++ - Klasse haben einen impliziten "this" -Zeiger, der übergeben wird (im Allgemeinen als der erste Parameter, aber ich glaube, dass dies implementierungsabhängig ist), so dass sie nicht als "normale" C-Funktionen behandelt werden können. Wenn Sie eine "statische" Funktion hatten, dann ist es nicht wirklich ein Mitglied und kann wie eine normale C-Funktion behandelt werden. Wenn es eine Memberfunktion sein muss, haben Sie eine Menge Arbeit vor sich und es gibt nicht genug Code in der Frage, damit wir wissen, wie wir Ihnen helfen können. –

Antwort

1

Funktionszeiger in C++ beginnen, schwierig zu werden, wenn Sie der Mischung Klassen hinzufügen. Werfen Sie einen Blick auf diese Frage: function pointers to member functions.

Es gibt einen impliziten this Zeiger, den Sie behandeln müssen. Schließlich existiert diese Funktion nicht außerhalb einer INSTANTIATION eines Objekts. Wenn die Funktion nicht als statisch definiert ist, sollte das, was Sie haben, funktionieren.

Verwandte Themen