Rückgabe der Startadresse einer Liste
-
Hallo zusammen,
hab hier eine gut gefüllte Liste erstellt und möchte nun einer Funktion die Anfangsadresse dieser Liste übergeben, aber mein Compiler meckert:
135 cannot convert `LIST' to `char*' in return
so sieht der Code dazu aus:
char DirSeek (){ struct LIST{ FNAME Pfad; struct LIST *Next; } *Anfang=NULL, *Liste; if(Anfang == NULL) { if( (Anfang = (struct LIST *)malloc(sizeof(struct LIST))) == NULL ) { cout<< "Kein Speicherplatz für anfang vorhanden!\n"; } /*Liste füllen*/ return *Anfang; }
Wie kann ich das Problem elegant lösen?
Recht schönen Dank für die Aufmerksamkeit
-
1. die pointer sind nicht initialisiert. d.h. der vergleich if(Anfang == NULL) ist vom zufall abhängig.
2. die funktion sollte char*, nicht char zurückgeben. aber besser sie gibt struct list* zurück.
3. return (char*)Anfang sollte es tun.
4. der rückgabewert von malloc sollte nicht gecastet werden.
5. strings als shift count sind nicht möglich
6. was ist 'cout'? eine globale variable?
7. schreib tag names nicht in grosschrift. sonst könnte man sie mit makros verwechseln.
8. mach die struct-definition ausserhalb der funktion. siehe dazu auch (2)
fehlt noch was?
-
Vielen Dank fricky
Deine tipps waren der Bringer. Hab echt lange im I-Net gesucht, aber kein ähnlich geartetes Problem gefunden.
Hatte im Studium C und dann C++, deswegen hau ich da manches zusammen.Zu dem Gecaste: ich hab die ganze Listen-sache aus dem Galileobook rauskopiert.
Wieso ist das denn mit dem malloc bedenklich?Danke dir
-
PlattitüdenAbonennt schrieb:
Zu dem Gecaste: ich hab die ganze Listen-sache aus dem Galileobook rauskopiert.
das buch wirf weg. da sind verdammt viele fehler drin.
PlattitüdenAbonennt schrieb:
Wieso ist das denn mit dem malloc bedenklich?
casts können fehler verdecken, daher sollte man nie casten wenn man's nicht unbedingt muss. hier im forum gibts einige threads dazu und unser ex-moderator Tim hat sogar ein FAQ dazu geschrieben.
-
Hallo
Leider klappt das irgendwie nicht(bin kein Profi), denn compiler meldet:
invalid conversion from `void*' to `List*'
wenn ich es so mache:
if( (Anfang = /*(struct List *)*/ malloc(sizeof(struct List))) == NULL ) { cout<< "Kein Speicherplatz für anfang vorhanden!\n"; }
Rätsel,rätsel,rätsel...
-
PlattitüdenAbonennt schrieb:
invalid conversion from `void*' to `List*'
du verwendest wohl einen c++ compiler? in C geht das normalerweise. ändere den dateinamen von .cpp in .c. manchmal hilft das.