Überladene Member-Funktion ???
-
Hallo Leute,
ich habe für mein Project vor mit einer einfachverketteten Liste zu arbeiten.
soweit so gut doch schon bei der ersten Funktion schießt mich MFC ab.
Ich hab folgende Funktion angelegt:void einfuegen_am_anfang(int datum, struct list * liste);
soweit so gut. Er legt auch direkt den Funktionsrumpf an den dann wie folgt aussieht:
void CVklDlg::einfuegen_am_anfang(int datum, struct list* liste)
anschließend hab ich die Funktion mit dem entsprechenden Befehlen gefüllt.
Doch wenn ich das nun kompiliere sagt mir VC++ folgendeserror C2511: 'einfuegen_am_anfang' : Überladene Member-Funktion 'void (int,struct CVklDlg::list *)' nicht in 'CVklDlg' gefunden
d:\vkl\vkldlg.h(14) : Siehe Deklaration von 'CVklDlg'Hat jemand ne Idee wie ich die Funktion zum rennen bekomme.
-
Kann es sein, das
void einfuegen_am_anfang(int datum, struct list * liste);
nicht in
class CVklDlg : public ..... { void einfuegen_am_anfang(int datum, struct list * liste); }
steht
-
@ByteSlider:
leider steht es doch drin:class CVklDlg : public CDialog { public: void einfuegen_am_anfang(int datum, struct list * liste);
daran hab ich auch schon gedacht aber trotzdem danke.
-
@TheShadow:
Das muß aber so was in der Art sein
Wenn ich das bei mir so einfüge, bigt es keine
Übersetzungsfehler
-
@ByteSlider
Ich hab mal etwas rumgespielt und das Public vonpublic: void einfuegen_am_ende(int datum, struct list *liste); void einfuegen_am_anfang(int datum, struct list *liste); int error; struct item { struct item *netx; int daten; }; struct list { struct item *start; struct item *end; }; int erzeuge_Liste();
auf folgendes umgestellt:
class CVklDlg : public CDialog { public: int error; struct item { struct item *netx; int daten; }; struct list { struct item *start; struct item *end; }; int erzeuge_Liste(); void einfuegen_am_ende(int datum, struct list *liste); void einfuegen_am_anfang(int datum, struct list *liste);
im nachhinein ist es auch logisch das erst die structuren definiert sein müssen aber VC++ sett jedesmal wenn ich ne neue Funktion generiere diese ganz oben ins public und sobald dort dann eine der Strukturen drin steht bekomm ich den Fehler.
Nach ne Frage:
Folgende Definition läuft auf einen Fehler warum ?void CVklDlg::einfuegen_am_anfang(int datum, list *liste) { struct liste *neues_element = malloc(sizeof(item)); }
der Kompiler bring folgende Fehlermeldung:
error C2440: 'initializing' : 'void *' kann nicht in 'struct CVklDlg::einfuegen_am_anfang::liste ' konvertiert werden
Konvertierung von 'void' in Zeiger auf nicht-'void' erfordert eine explizite TypumwandlungAlso so wie ich das eigentlich wollte ist das ich die Nutzdaten und die Listenstruktur übergebe und in der funktion mir ein dynamisches Objekt der Struktur anlege mit dem ich dann die ´Nutzdaten in die struktur hänge. Was will VC++ da mit void ?
-
Hi,
ich hatte die Funktionen ohne der Struktur angelegt.
da hat er ebenfalls nicht gemeckert
Zur zweiten Frage: malloc gibt einen void-pointer zurück und der
compiler meckert
weil die typen nicht übereinstimmen. Du mußt den void-point auf die Struktur casten :pstruct liste *neues_element = (struct liste *)malloc(sizeof(item));
Du soltes aber lieber "new" nehmen, da sonst Probleme auftreten können(werden)
[ Dieser Beitrag wurde am 05.08.2002 um 16:07 Uhr von ByteSlider editiert. ]
-
@ByteSlider
jetzt wo du es sachst wirds mir auch klar wie Bohnensuppe
Ich wurschtel mich im Augenblick durch einen Quellcode der mal in einer Comandlineanwendung lief und eine verkettete Liste (einfach) erzeugen soll. Leider kann ich den nicht ganz eins zu eins ins MFC übernehmen da das Tut sau mißerabel ist.Kennt jemand ein gutes Tut für verkettete Listen am besten in C++ ?
-
Schade,
für pointer-listen gibt es sonst auch ne schöne classe:
CPtrList
-
Ich wollte mir eigentlich eine auf meine bedürfnisse zugeschnittene Klasse schreiben.
@ALL
Wenn jemand gutes Material zu verketteten Listen und Suchalgorithmen kenn herdamit.