Zeigerproblem
-
hi, hab ein kleines problem beim Aufruf einer Funktion, weil ich nicht so recht mit der Zeigerschreibweise klar komme, vielleicht kann mir ja einer von euch weiter helfen.
//Ersetzen der Telefonnummer tel[i] durch telnr bool operator()(unsigned int i, char *telnr) { if (i >= at) return false; delete [] tel[i]; tel[i] = new char [strlen(telnr)+1]; strcpy (tel[i],telnr); return true; //Ersetzen der Telefonnummer tel[i] durch telnr case 11 : { system ("cls"); int i; char *telnr; cout<<"Index 0 = Anfang"<<endl; cout<<"Geben Sie den Index der zu \204ndernden Tel Nr. an: "; cin>>i; cout<<"Geben Sie die neue Telefonummer ein: "; cin>>*telnr; n->operator()(i, telnr) ; cin.get (); cin.ignore (INT_MAX, '\n'); break; }
mfg Carsten
-
bool operator()(unsigned int i, char *telnr)
---> Das müsste so aussehen :
bool operator(unsigned int i, char *telnr)
----------------------
Und das:n->operator()(i, telnr)
so:
n->operator(i, telnr)
P.S.: Finde es irgendwie komisch das du schon mit Objekten und Zeigern arbeitest und dabei nicht genau weißt wie ne funktion definiert oder aufgerufen wird ???????
-
Hi
mit operator()(i, telnr); ruft er den überladenen op() auf.
auch wenn das mit *obj(i,telnr) vll intuitiver wäre.
Aber zum code lässt sich wirklich schwer was sagen. Was ist zum beispiel n ?
Zeig mal ein kleines bisschen mehr oder schreib wenigstens dran, was was ist, wenn man es nicht aus dem rest des codes ersehen kann.
sofar ....
-
Ohhhhhhhhhhhhhhh man, bin ich blöd ich glaub ich gehe lieber heute früher schlafen.....
Wie konnte ich das nur nicht sehen
... ManOman *Schäm*
-
HI
Danke für eure antworten. Das ganze gehört du einem Projekt das meine Freundin schreiben muss. Aber die hat sowas noch nie gelernt bekommen. Ich kann ihr da leider auch nicht großartig weiterhelfen.//Ersetzen der Telefonnummer tel[i] durch telnr bool operator()(unsigned int i, char *telnr) { if (i >= at) return false; delete [] tel[i]; tel[i] = new char [strlen(telnr)+1]; strcpy (tel[i],telnr); return true; //Ersetzen der Telefonnummer tel[i] durch telnr case 11 : { system ("cls"); int i; char *telnr; cout<<"Index 0 = Anfang"<<endl; cout<<"Geben Sie den Index der zu \204ndernden Tel Nr. an: "; cin>>i; cout<<"Geben Sie die neue Telefonummer ein: "; cin>>*telnr; n->operator()(i, telnr) ; cin.get (); cin.ignore (INT_MAX, '\n'); break; }
Es geht eigentlich hier nur darum das der Operator () (i,telnr) in einem Menür aufgerufen werden soll.
Die deklaration heißt ja so :bool operator()(unsigned int i, char *telnr)
Das Problem ist das die Variable telnr als Zeiger deklariert ist.
Im Menü hab ich daraufhin eine Varable telnr auch als Zeiger deklariert.char *telnr;
Die neue Telefonummer wird auch in den Zeiger eingelesen.
cin>>*telnr;
Telnr wird dann an die Funktion übergeben.
n->operator()(i, telnr) ;
n ist nur ein feld von einer person die Name und Vorname und einige Telefonnummern beinhaltet. Mit der Funktion soll irgendeine Telefonnummer von der Person geändert werden.
Das Problem ist jetzt das er beim Ausführen meint das telnr eine Variable ohne Initialisierung ist.
Weiß aber nun nicht woran das liegen kann. Hab auch probiert das als Zeiger zu übergeben aber da bringt er auch einen Fehler.Hoffe das ist etwas genauer, wenn nicht dann einfach was fragen. Nur der gesamte Quelltext hier reinzustellen wäre zu viel.
Danke schonmal
Carsten
-
Du solltest vielleicht statt
char *telnr; char telnr[15];
(oder wie lange die tel.-nr. halt werden können) schreiben.
Außerdem verstehe ich nicht, warum ein Operator überladen wird, wenn Du ihn dann wieder so umständlich aufrufst:
n->operator()(i, telnr);
Das Überladen wird doch extra deshalb gemacht, damit man ihn anschließend bequem benutzen kann.