"Objektreferenz.Funktion" funktioniert irgendwie nicht richtig
-
Hallo,
ich weiß, es hört sich blöd an 'funktioniert irgendwie nicht richtig', aber da ich gerade erst mit C++ anfange und der Compiler mir nicht helfen will(keine Fehlermeldungen/Warnungen), weiß ich nicht wie ich es sonst sagen soll.
Ich weiß das es falsch ist, da mein Rechner mir sagt: "telefonbuch.exe hat ein Problem festgestellt und muss beendet werden."
Compiler: g++
OS: Windows Xp(Home)Ich habe mir 2 Klassen gebaut, die erste(SortedArray.h) verwaltet ein sortiertes Array, die zweite Klasse(Hash.h) verwaltet so ein sortiertes Array mit Schlüssel-Wert paaren.
Nachdem ich mit einem kleinen test Programm beide Klassen getestet/Fehler korrigiert hatte, wollte ich sie auch mal richtig anwenden.
Dafür habe ich mir ein Telefonbuch Programm vorgenommen.
Doch leider scheitert es jetzt schon am erstellen neuer Einträge in das Telefonbuch:// einbinden der Klassen #include "IgnoreCaseStringComparator.h" #include "Hash.h" #include <iostream> #include <string> using namespace std; // dekleration von create_item void create_item(Hash<string,string,IgnoreCaseStringComparator>&); // ... int main(void) { // erstellen des Hashes Hash<string,string,IgnoreCaseStringComparator> phone_book; // ... // aufruf von create_item create_item(phone_book); // ... return 0; } // create_item void create_item(Hash<string,string,IgnoreCaseStringComparator> &pb) { // ... // get name and phone number string name; string tel; do { cout<<" Enter name: "<<flush; cin>>name; if ([b]pb.has(name)[/b]) cout<<" Name already in use.\n"<<flush; } while([b]pb.has(name)[/b]); cout<<" Enter phone number: "<<flush; cin>>tel; // create new item pb.insert(name,tel); cout<<"\n Item created.\n"<<flush; // ... }Ich habe mir das lange angeguckt und ein bisschen rumprobiert, bis ich darauf gekommen bin, dass der Fehler an den markierten Stellen(pb.has(name)) liegen muss.
Ich kann mir das leider nicht erklären, da ich auch diese Funktion vorher getestet habe:
// ... Hash<string,float,IgnoreCaseStringComparator> hash; hash.insert("crash",0.0f); if ([b]hash.has("crash")[/b]) cout<<"crash ist enthalten."<<endl // ...Ausgabe war: crash ist enthalten.
Könnte es vielleicht damit zusammenhängen, dass das Objekt(phone_book) an die Funktion create_item übergeben wird??
Ich weiß wirklich nicht weiter und bin für jede Hilfe dankbar.
-
das kannst du doch ausprobieren, indem due phone_book mal globla machst. Aber ich denk ncih, dass das daran liegt. Geh doch mal mit nem debugger rein und guck wo genau der fehler auftritt. dann findste sicher, worans liegt
-
Gerade habe ich phone_book global gemacht und gesehn, dass du Recht hast.
Es liegt wohl nicht an der Übergabe des Objektes, aber leider habe ich den Debugger(gdb) noch nie benutzt und komme damit nicht so gut zurecht.Ich habe beim googlen auch nur eine kurze Beschreibung zum gdb gefunden, die in ungefähr so aussah wie die Ausgabe des Hilfe Bildschirms von gdb(gdb --help).
Gibt es vielleicht einen guten grafischen Debugger(muss auf Windows laufen), oder eine kleine Einführung in die Benutzung von gdb, die ich übersehen habe ?
-
Da ich nicht mit dem Debugger umgehen kann habe ich weiter gesucht und den Fehler in der Funktion Hash::has() gefunden.
Für die Schlüssel/Wert Paare verwende ich eine eigene Klasse, die, um ein Paar zu erstellen, natürlich auch einen Wert.
Da ich es unpraktisch fand in einem Hash auch noch einen Wert mitzugeben um an einen Wert heranzukommen habe ich einfach einen cast auf 0 gemacht.Leider funktioniert das bei strings nicht so gut...
Jetzt erstelle ich erst einen Wert und übergebe ihn dann.
Dabei gehe ich davon aus, dass die Klasse für den Wert einen default-Comparator besitzt.Danke für deine Hilfe.
Ich würde trotzdem gerne wissen, wo ich eine gute Erklärung zum gdb bekommen könnte.MfG. 0k