Borland C++.. Objektorientierte Programmierung Hilfe :) - Seite 2

Seite 2 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/borland_c_objektorientierte_programmierung_hilfe_79754/page_2 - zur Vollversion wechseln!


Vivo schrieb am 24.05.2003 um 20:23

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 schrieb am 24.05.2003 um 20:27

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 schrieb am 24.05.2003 um 20:44

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 schrieb am 24.05.2003 um 20:53

nagut.. thx amal :)

*hoff dass da wer auftaucht*


Ringding schrieb am 25.05.2003 um 10:18

Die Strings sind definitiv nicht das Problem. Die hier beschriebenen Sachen sollten genauso auch auf Strings funktionieren.


Vivo schrieb am 25.05.2003 um 11:05

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 schrieb am 25.05.2003 um 11:44

kann auch sein, allerdings wüsst i ned was i da verbockt ham könnt :(


Ringding schrieb am 25.05.2003 um 13:16

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 schrieb am 25.05.2003 um 13:19

hm Ringding.. du siehst auch keinen fehler? :(


Vivo schrieb am 25.05.2003 um 13:58

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 schrieb am 25.05.2003 um 14:00

Poste noch mal die relevanten Teile, dann kann ich es mir anschauen.


XeroXs schrieb am 25.05.2003 um 19:28

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;


Ringding schrieb am 25.05.2003 um 19:36

help ist ein nicht initialisierter Pointer, den du prev zuweist. Danach rufst damit getall auf, das kann nicht gehen.


XeroXs schrieb am 25.05.2003 um 20:25

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 schrieb am 25.05.2003 um 20:34

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 ...




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026