URL: https://www.overclockers.at/coding-stuff/borland_c_objektorientierte_programmierung_hilfe_79754/page_2 - zur Vollversion wechseln!
Urks ... jetzt seh ich erst dass du da Strings übergibst ... klar das es nicht funzt ...
Ehrlich gesagt hab ich mit string noch nie gearbeitet, und weiss deshalb nicht genau wie die sich verhalten. Ich hab alles immer mit char - Arrays gemacht und im vc++ eben mit cstrings.
hmm ... also falls du es auch nicht weisst, oder sich keiner deinem traurigen schicksal annimmt würd ich dir raten das ganze mit simplen char arrays zu machen.
Wobei du darauf achten musst dass der Name dieses Strings dann automatisch der Pointer auf das erste Element ist und du kannst dir somit die & bei meiner Funtkion sparen (nur bei den strings, bei den int müssen sie klarerweise bleiben). Weiters kannst du dann nicht einfach mit = zuweisen sondern musst dir die string.h includieren und das ganze mit stringcpy erledigen ...
::btw. wenn ich raten müsste, würd ich sagen string verhaltet sich gleich wie ein char - Array, ... aber probieren geht über studieren ...
hm.. hab grad um zu probiern obs echt an den Strings liegt alle Strings ausgeschlossen, und das ganze nur mit den Integern gemacht.. fehler kommt aber trotzdem 
hmm ...
Also da ich da jetzt bei mir ( in der getall - Funktion) keinen Fehler seh der mir unterlaufen ist würd ich dir folgendes vorschlagen :
Du gehst mit dem Debugger die Funktion step by step durch und schaust ob die Adressen, die an die Funktion übergeben werden stimmen bzw. in welcher Zeile genau der Error auftritt ...
Sonst kann ich dir so leider nicht weiterhelfen ... vielleicht taucht noch aus heiterem himmel ein borland c++ programmierer auf und kann dir sagen was der fehler ist ... 
nagut.. thx amal 
*hoff dass da wer auftaucht*
Die Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.
Zitat von RingdingDie Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.
Naja, ich meinte diese Funktion ...Zitat von VivoZitat von RingdingDie Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.

kann auch sein, allerdings wüsst i ned was i da verbockt ham könnt 
Vivo, so ist es aber nicht. Es werden ganz normale Pointer auf String Objekte übergeben, und deren =-Operator wird dann in der Funktion aufgerufen.
hm Ringding.. du siehst auch keinen fehler? 
Aha, 'string' ist eine klasse ... *check*Zitat von RingdingVivo, so ist es aber nicht. Es werden ganz normale Pointer auf String Objekte übergeben, und deren =-Operator wird dann in der Funktion aufgerufen.
Poste noch mal die relevanten Teile, dann kann ich es mir anschauen.
ok die Aktuelle Version sieht nun so aus:
Code:[b]//Das Objekt und seine Konstruktoren und Methoden[/b] class KKartei { protected: String name; String adresse; String telnr; int knr; int kkonto; public: KKartei *next; KKartei *prev; KKartei(int, int, String, String, String, int, KKartei*); KKartei* getprev(); void getall(int*, String*, String*, String*, int*); }; KKartei::KKartei(int m, int kn, String n, String a, String t, int kk, KKartei *prv) { if(m==1) { name=n; adresse=a; telnr=t; knr=kn; kkonto=kk; prev=prv; } } KKartei* KKartei::getprev() { return prev; } void KKartei::getall(int *tmp_nr, String *tmp_n, String *tmp_a, String *tmp_t, int *tmp_kk) { *tmp_nr = knr; *tmp_n = name; *tmp_a = adresse; *tmp_t = telnr; *tmp_kk = kkonto; } [b]//Erstellen einer neuen Instanz des Objektes per Konstruktor[/b] KKartei *help; KKartei *aktuell; help=aktuell; aktuell=new KKartei(first, Edit1->Text.ToInt(), Edit2->Text, Edit3->Text, Edit4->Text, Edit5->Text.ToInt(),help); [b]//Laden des vorherigen eintrags[/b] neu=aktuell->getprev(); neu->getall(&temp_nr, &temp_n, &temp_a, &temp_t, &temp_kk); [b]//Ausgabe vom String temp_n[/b] Edit2->Text=temp_n;
help ist ein nicht initialisierter Pointer, den du prev zuweist. Danach rufst damit getall auf, das kann nicht gehen.
also.. beim allerersten erzeugen eines objekts passiert dies nicht (eh klar, gibt ja kein prev).. passiert erst beim 2ten mal.
gedacht isses so.. die adresse der alten instanz wird gesichert (Zeile help=aktuell; ), dann eine neue erstellt und die alte adresse als *prev* reingeschrieben
falls das nicht so geht, bitte helfen 
Ja, aber beim ersten Elemnt hast du dann einen Pointer der ins Nirvana zeigt ... du solltest den Pointer des ersten Objekts auf NULL setzen.
und was Ringding gemeint hat :
Zitat von XeroXsZitat von Iceblood-Blue-->ATI Radeon 8500
-->512 ( 2x256 MB) MB SDRam 133
-->19" Belinea Monitor 98Khz
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026