"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Borland C++.. Objektorientierte Programmierung Hilfe :)

XeroXs 23.05.2003 - 19:36 2364 30
Posts

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
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 ...

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
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 :(

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
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 ... ;)

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
nagut.. thx amal :)

*hoff dass da wer auftaucht*

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Die Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von Ringding
Die Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.
Zitat von Vivo
Zitat von Ringding
Die Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.
Naja, ich meinte diese Funktion ...
Wenn sich die Strings hier so verhalten wie ich meine (nämlich dass der name des strings ein pointer auf das erste element ist) dann wird beim aufruf der getall - funktion die adresse des pointers auf das erste element in die Funktion geliefert, was nicht so optimal ist ..

Edit : Wenn du auch keinen Fehler mehr findest, dann hats wohl xeroxs in mit der umsetzung verbockt ... :p ;)

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
kann auch sein, allerdings wüsst i ned was i da verbockt ham könnt :(

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Vivo, so ist es aber nicht. Es werden ganz normale Pointer auf String Objekte übergeben, und deren =-Operator wird dann in der Funktion aufgerufen.

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
hm Ringding.. du siehst auch keinen fehler? :(

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von Ringding
Vivo, so ist es aber nicht. Es werden ganz normale Pointer auf String Objekte übergeben, und deren =-Operator wird dann in der Funktion aufgerufen.
Aha, 'string' ist eine klasse ... *check*

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Poste noch mal die relevanten Teile, dann kann ich es mir anschauen.

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
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;
Bearbeitet von XeroXs am 25.05.2003, 19:34

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
help ist ein nicht initialisierter Pointer, den du prev zuweist. Danach rufst damit getall auf, das kann nicht gehen.

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10334
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 :)

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
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 XeroXs
Zitat von Iceblood-Blue
-->ATI Radeon 8500
-->512 ( 2x256 MB) MB SDRam 133
-->19" Belinea Monitor 98Khz

Du legst den ersten pointer an. Du legst den 2ten Pointer. (beide zeigen auf kein Objekt. Und jetzt weist du help auf aktuell -> folglich help zeigt weiterhin auf nichts. Deshalb wird prev immer auf einen nicht vorhandenen Speicherbereich zeigen ...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz