C: Funktionszeiger innerhalb eines typedef struct
Ich versuche zu erstellen, die eine verknüpfte Liste in C versuchen aber pack es schön in etwas einer C++ - Stil Klasse. Ich habe einige Probleme mit Funktionszeigern in C
typedef struct linkedList {
int count;
struct msgNode *front;
struct msgNode *back;
void (*addMSG)(unsigned char *, int, struct linkedList *);
} msgList;
void addMSG(unsigned char *data, int size, struct linkedList *self);
Im Idealfall würde ich mag, um es so dass Sie machen können Sie Liste aus, und klicken Sie auf hinzufügen, können Sie einfach rufen Sie eine "Methode"(Funktion) innerhalb der Struktur, die Simulation von Verhalten, die Sie sehen würde, in C++.
Derzeit bekomme ich einen segmentation fault, wenn ich rufe addMSG, die natürlich ist, weil addMSG ist nicht nur ein Zeiger auf eine Funktion. Aber ich will nicht zu haben, um eine Funktion anzugeben, zeigen Sie auf jedes einzelne Zeit, die ich möchte verwenden eine verknüpfte Liste. Gibt es eine nette Möglichkeit zu haben, Funktionszeiger, ohne implizit mit hinweisen auf die Funktion, oder haben Sie implizit verweisen Sie auf die Funktion?
Dies ist nur die teilweise Umsetzung, die hier gezeigt werden. Am Ende dieses struct wird über alle notwendigen Funktionen. Dies ist nur für den Willen halten diese Frage kurz und auf den Punkt.
In einer vorherigen Antwort von mir, erkläre ich im detail, wie dies getan werden kann, in einer Weise, dass tatsächlich unterstützt dynamische Disposition.
InformationsquelleAutor Edwin | 2013-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weisen Sie die Funktion für das Mitglied. ich auch empfehlen, indem Sie Ihnen verschiedene Namen:
Dann nach dem erstellen eines msgList:
myList.addMSG = addMSGImpl;
wie gebe ich die Argumente?Wenn Sie es nennen:
myList.addMsg(buffer, 20, list)
InformationsquelleAutor Asaf
Gut Sie können nicht hinzufügen ein default-Wert in der Deklaration der Struktur struct, aber das, was Sie tun können, ist:
linkedList
Instanz - ich denke, Sie haben gesehen, dass in C-Stil-BibliothekenWie:
InformationsquelleAutor Rudolfs Bundulis
Können Sie haben eine nicht initialisierte Funktion Zeiger nur gut, solange Sie es gar nicht verwenden. Wenn Sie tun wollen, es zu benutzen, um eine Funktion aufzurufen, dann offensichtlich haben Sie eine Funktion zuweisen, um es. C ist nicht in der Lage zu erraten, welche Funktion Sie verwenden möchten.
Wenn Sie eine verkettete Liste Struktur, wo manchmal müssen Sie eine Funktion, und manchmal nicht, dann geben Sie einfach
NULL
es, wenn du die Liste erstellen und Ihre Liste-Implementierung nur die Funktion aufrufen, wenn es nichtNULL
.Wenn es immer Punkte, um die gleiche Funktion, nur dann nicht die Zuweisung in den Konstruktor-Funktion.
InformationsquelleAutor Paul Griffiths