fr33g Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 Hey Leute, hab mir ein Programm Adressbuch geschrieben, es hat auch alles funktioniert, aber als ich das Programm verbessern wollte und einige sachen aus dem main() teil in ein extra funtkionen schreiben wollte, hab ich irgendein fehler gemacht. ich find ihn aber leider net, hoff ihr könnt mir helfen, es geht um das übergeben eines arrays mit zeigern auf mein objekt adresse. main.cpp #include "classAdressen.h" #include <iostream> #include <string> using namespace std; void auslesen(int& i, bool& right, Adressen* pZeiger[40]); void einlesen(int& i, Adressen* pZeiger[40]); int main() { const int maxSize = 40; int choice; bool stop = false; bool stop2 = false; bool right = false; Adressen *pZeiger[maxSize]; //string vorname; for (int i = 0; i < 40; i++) { marke:; cout << "Wollen sie eine Adresse speichern(1)oder nicht(2)?"; cin >> choice; if (choice == 2) stop = true; else if( (choice != 2) && (choice != 1) ) { cout << "Falsche Eingabe\n"; goto marke; } while (stop == true) { marke2:; cout << "Wollen sie Adressen auslesen(1) oder beenden(2)?"; cin >> choice; if (choice == 2) { stop2 = true; break; } else if( (choice != 2) && (choice != 1) ) { cout << "Falsche Eingabe\n"; goto marke2; } auslesen(i,right,pZeiger[maxSize]); /*cout << "Welche Adresse wollen sie auslesen(Vorname): "; cin >> vorname; for(int j = 0; j < i; j++) { right = false; if(pZeiger[j]->compareString(vorname)) { cout << pZeiger[j]->getVor_name() << "\n"; cout << pZeiger[j]->getNach_name() << "\n"; cout << pZeiger[j]->getAdresse() << "\n"; cout << pZeiger[j]->getTele() << "\n"; right = true; break; } } if(!right) cout << "Keine Übereinstimmung!\n";*/ } if (stop2 == true) break; einlesen(i,pZeiger[maxSize]); /*cout << "Geben sie den Vornamen ein: "; string vor_name; cin >> vor_name; cout << "Geben sie den Nachname ein: "; string nach_name; cin >> nach_name; cout << "Geben sie die Adresse ein: "; string adresse; cin.ignore(); getline(cin,adresse); cout << "Geben sie die Telefonnummer ein: "; string tele; cin >> tele; pZeiger[i] = new Adressen(); pZeiger[i]->setVor_name(vor_name); pZeiger[i]->setNach_name(nach_name); pZeiger[i]->setAdresse(adresse); pZeiger[i]->setTele(tele);*/ } } void auslesen(int& i, bool& right, Adressen* pZeiger[40]) { string vorname; cout << "Welche Adresse wollen sie auslesen(Vorname): "; cin >> vorname; for(int j = 0; j < i; j++) { right = false; if(pZeiger[j]->compareString(vorname)) { cout << pZeiger[j]->getVor_name() << "\n"; cout << pZeiger[j]->getNach_name() << "\n"; cout << pZeiger[j]->getAdresse() << "\n"; cout << pZeiger[j]->getTele() << "\n"; right = true; break; } } if(!right) cout << "Keine Übereinstimmung!\n"; } void einlesen(int& i,Adressen* pZeiger[40]) { cout << "Geben sie den Vornamen ein: "; string vor_name; cin >> vor_name; cout << "Geben sie den Nachname ein: "; string nach_name; cin >> nach_name; cout << "Geben sie die Adresse ein: "; string adresse; cin.ignore(); getline(cin,adresse); cout << "Geben sie die Telefonnummer ein: "; string tele; cin >> tele; pZeiger[i] = new Adressen(); pZeiger[i]->setVor_name(vor_name); pZeiger[i]->setNach_name(nach_name); pZeiger[i]->setAdresse(adresse); pZeiger[i]->setTele(tele); } classAdressen.h #include <string> #ifndef CLASSADRESSEN_H_INCLUDED #define CLASSADRESSEN_H_INCLUDED class Adressen { public: void setVor_name(std::string&); void setNach_name(std::string&); void setAdresse(std::string&); void setTele(std::string&); std::string getVor_name()const{return itsVor_name;} std::string getNach_name()const{return itsNach_name;} std::string getAdresse()const{return itsAdresse;} std::string getTele()const{return itsTele;} bool compareString(std::string&)const; private: std::string itsVor_name; std::string itsNach_name; std::string itsAdresse; std::string itsTele; }; #endif // CLASSADRESSEN_H_INCLUDED classAdressen.cpp #include "classAdressen.h" #include <iostream> #include <string> using namespace std; void Adressen::setVor_name(string &vor_name) { itsVor_name=vor_name; } void Adressen::setNach_name(string &nach_name) { itsNach_name=nach_name; } void Adressen::setAdresse(string &adresse) { itsAdresse=adresse; } void Adressen::setTele(string &tele) { itsTele=tele; } bool Adressen::compareString(string &temp)const { if(itsVor_name==temp) return true; } Der compiler meldet für zeile 51 in main.cpp can no convert adressen* to adressen** for argument 3 of void auslesen.... und das gleiche für zeile 75 und der funtkion einlesen.... danke schonmal Zitieren
Klotzkopp Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 auslesen(i,right,pZeiger[maxSize]); einlesen(i,pZeiger[maxSize]); Lass das [maxSize] hier weg, es bewirkt nicht das, was du glaubst. Machen wir ein kleines Spiel: Was ist pZeiger[0]? Antwort: Das erste Element des Arrays pZeiger. Was ist pZeiger[1]? Antwort: Das zweite Element des Arrays pZeiger. Was ist pZeiger[maxSize]? Antwort: Das maxSize+1.te Element des Arrays pZeiger. Erstens hat dein Array gar nicht so viele Elemente, und zweitens willst du sicher nicht nur ein einzelnes Element übergeben, oder? Mir ist klar, dass du hier versuchst, eine Größenangabe mitzuliefern, aber das funktioniert so nicht. Überhaupt geht bei Arrays die Größeninformation verloren, wenn man sie als Funktionsparameter benutzt. In der Funktion kommt nur ein Zeiger auf das erste Element an. Die folgenden Funktionsdeklarationen sind also absolut gleichwertig: void einlesen(int& i, Adressen* pZeiger[40]); void einlesen(int& i, Adressen* pZeiger[]); void einlesen(int& i, Adressen** pZeiger);[/code] Wenn du diesen Funktionen eine Größenangabe mitgeben willst, musst du dafür einen zusätzlichen Parameter einführen. Mittelfristig solltest du versuchen, von eigener Speicherverwaltung wegzukommen und statt dessen die Container der Standardbibliothek zu benutzen. Das macht vieles einfacher und verringert die Gefahr von Speicherlecks und Pufferüberläufen. Zitieren
carstenj Geschrieben 21. Januar 2010 Geschrieben 21. Januar 2010 Hi, außerdem: Goto zeugt oft von schlechtem Stil. Versuche das mal anders zu lösen, denn sowas erzeugt auf Dauer unübersichtlichen Code. Wobei Kot hier auch zuträfe. Zitieren
fr33g Geschrieben 21. Januar 2010 Autor Geschrieben 21. Januar 2010 ok werds gleich mal probieren zu ändern. danke schonmal ja ich weiß;-) deswegen hat ich das eg auch schon anderster gelöst, aber hab wohl vergessen dass zu speichern:D meld mich nochmal nachher obs geklappt hat;-) danke schonmal:-P Zitieren
fr33g Geschrieben 21. Januar 2010 Autor Geschrieben 21. Januar 2010 Sooo also habs probiert und es geht=) War ja mal ein sau dummer Fehler, man hört immer wieder und weiß eg au arrays fangen bei 0 an und der name ist ein zeiger auf das erste element des arrays und trotzdem macht man den fehler selber auch:D;-) vielleicht könnt ihr mir auch in meinem thread debuggen helfen=) wär toll Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.