Anfänger



  • Hi, wie könnte man hier am besten auf einzelne Kundenaccounts zugreifen?

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    class kunde {
    private:
    
    	int id;
    	int pin;
    	int cash;
    
    public:
    	static int kundenid;
    	kunde () {
    		cout << "Kunde wurde erstellt ";
    		kundenid++;
    		id = kundenid;
    		cout << "Kunde mit der ID " << id << " wurde erstellt" << endl;
    	}
    };
    
    class verwaltung {
    private:
    	vector<kunde>kundenliste;
    	vector<kunde>::iterator i;
    
    public:
    	void neuerkunde () {
    		kunde neuerkunde;
    		kundenliste.push_back (neuerkunde);
    	}
    
    	void size (){
    			cout << kundenliste.size();
    	}
    };
    
    int kunde::kundenid;
    
    int main() {
    
    	kunde::kundenid=0;
    
    	verwaltung boss;
    
    	boss.neuerkunde();
    	boss.neuerkunde();
    	boss.neuerkunde();
    	boss.size();
    
    	cout << endl;
    
    	system ("Pause");
    }
    


  • Also als Boss


  • Mod

    Bitte brauchbaren Threadtitel wählen. Leute interessieren sich für das Thema*, nicht dafür, wer die Frage stellt.

    Bitte klare Fragen stellen. Wir wissen nicht, was in deinem Kopf vorgeht. Wir wollen keine Ratespiele spielen. Du musst dein Vorhaben und dein Problem mit diesem Vorhaben einem Fremden erklären, der keine Ahnung hat, worum es überhaupt geht. Siehe:
    http://www.c-plusplus.net/forum/200753
    http://www.tty1.net/smart-questions_de.html

    *: Und damit ist das C++-Thema gemeint. Also nicht um "Kundenverwaltung", sondern hier um irgendeine+ Frage zu Zugriffen.
    +: Siehe mein zweiter Punkt. Ich kann dir nicht einmal einen Threadtitel vorschlagen, da ich keine Ahnung habe, was du willst.



  • Hast recht, sorry für den Titel.

    Mein Anliegen:

    Ich möchte eine Option haben, mit der ich mit der im Main erschaffenen Verwaltungsisntanz "boss", die Werte der Variablen, eines im Vector existierenden Kontos meiner Wahl, verändern kann.

    Also:

    gezielt ein Konto des Vektors aussuchen und Zugriff auf die Werte haben. Wie könnte man diese Option am besten umsetzen?


  • Mod

    AnfängerPlusPlus schrieb:

    gezielt ein Konto des Vektors aussuchen und Zugriff auf die Werte haben. Wie könnte man diese Option am besten umsetzen?

    Indem du eine entsprechende Funktion anbietest. Diese Funktion könnte einen Index des Vectors als Argument nehmen und dann gibt sie entweder das entsprechende Element des Vectors zurück oder besser, falls dir das was sagt, eine Referenz darauf. Und nochmal Bonuspunkte, wenn du diese Funktion operator[] nennst, aber vermutlich führt das zu weit.

    PS: Sachen wie vector<kunde>::iterator i; haben übrigens nichts als Klassenmember zu suchen!



  • Könnte man das auch über eine Suche der Membervariablen schaffen? Ich mein ich sag mal ein Kunde kommt zur Bank und sagt er hat seine Karte verloren. Im richtigen Leben wird dann nach Name etc gefragt und danach ermittelt..kann man sowas mit Grundkenntnissen umsetzen?



  • Nochmal, vllt war das undeutlich. Ist es möglich, einen gesamten Vektor nach definitionen von membervariablen zu durchsuchen?


  • Mod

    AnfängerPlusPlus schrieb:

    Nochmal, vllt war das undeutlich. Ist es möglich, einen gesamten Vektor nach definitionen von membervariablen zu durchsuchen?

    Ja. Du gehst ihn durch und guckst nach. Falls der Container sortiert ist, geht das auch noch effizienter, kommt eben drauf an.

    Für beide Fälle gibt's auch was Fertiges in der Standardbibliothek.



  • Ich glaub das ist der richtige Weg. Aber scheinbar ist ein Punktoperator hier nicht zulässig, warum?

    void suchekunde (kunde name) {
    		vector<kunde>:: iterator i;
    		for (i=kundenliste.begin();i!=kundenliste.end();i++)
    			if (kunde.name==name)
    				cout << 
    }
    	}
    


  • parameter ist (string name)


  • Mod

    Fehlermeldung, Code?

    Ich habe dir die Links am Anfang nicht zum Spaß gepostet. Deine Fragen sind schrecklich unverständlich gestellt. Lies die Links! Hier ist noch einer, bezüglich deiner letzten "Frage":
    http://www.c-plusplus.net/forum/304133



  • Laut dem Link anscheinend ein compilerfehler.
    Fehlermeldung: "dateipfad"(45): error C2059: Syntaxfehler: '.'

    es geht um die unterste methode der klasse verwaltung in der if-bedingung.

    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    class kunde {
    private:
    
    	int id;
    	int pin;
    	int cash;
    	string name;
    
    public:
    	static int kundenid;
    	kunde () {
    		cout << "Kunde wurde erstellt ";
    		kundenid++;
    		id = kundenid;
    		cout << "Kunde mit der ID " << id << " wurde erstellt" << endl;
    		cout << "Namen eingeben:" << endl;
    		cin >> name;
    	}
    };
    
    class verwaltung {
    private:
    	vector<kunde>kundenliste;
    
    public:
    	void neuerkunde () {
    		kunde neuerkunde;
    		kundenliste.push_back (neuerkunde);
    	}
    
    	void size (){
    			cout << kundenliste.size();
    	}
    
    	void suchekunde (string name) {
    		vector<kunde>:: iterator i;
    		for (i=kundenliste.begin();i!=kundenliste.end();i++) {
    			if (kunde.name==name)
    				cout << *i;
    		}
    	}
    };
    
    int kunde::kundenid;
    
    int main() {
    
    	kunde::kundenid=0;
    
    	verwaltung boss;
    
    	boss.neuerkunde();
    	boss.neuerkunde();
    	boss.size();
    	boss.suchekunde("test");
    
    	cout << endl;
    
    	system ("Pause");
    }
    


  • Also um den Punkt in der If-Bedingung. Ich will den eingegebenen Parameter in der Main (methode "suchekunde") übergeben um einen vergleich zwischen den vektorinhalten von kundenliste zu machen, bezüglich der privaten membervariablen "name", der klasse kunde, die sich im vector befindet, um zu schauen ob sich etwas identisches finden lässt.



  • Wenn ich statt kunde.name, i.name mache oder *i.name (nur relevant falls das jemand als Lösung vorschlägt), kommt :
    (45): error C2039: 'name': Ist kein Element von 'std::_Vector_iterator<_Myvec>
    und ein fehlercode der sehr oft das hier wiederholt:

    1>          ]
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(944): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>
    1>          ]
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(951): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>
    1>          ]
    

  • Mod

    AnfängerPlusPlus schrieb:

    Wenn ich statt kunde.name, i.name mache oder *i.name (nur relevant falls das jemand als Lösung vorschlägt), kommt :

    Programmierung durch wildes Raten? Code ist Logik pur! Du musst von jedem Zeichen in deinem Programm ganz genau wissen, warum du es wo setzt (oder nicht setzt)! Wenn du deinen eigenen Code nicht verstehst, ist dir kaum zu helfen.

    i ist ein Iterator. Der zeigt irgendwie auf einen Kunden aus dem Kundenvector. Du musst ihn dereferenzieren, wenn du auf das zugreifen möchtest, worauf er zeigt. Also mit Sternchen. *i.name ist leider falsch, da . stärker bindet als *. Da steht also effektiv *(i.name) . Und der Iterator hat kein Feld namens name , daher die Fehlermeldung*. Also muss es umgekehrt lauten: (*i).name . Das ist aber reichlich unpraktisch zu schreiben für etwas, was man andauernd braucht. Daher gibt es die Abkürzung i->name . Damit kommst du einen Schritt weiter. Du wirst feststellen, dass dies einen anderen Fehler auslöst, aber den überlasse ich erst einmal dir zur Lösung, da du dabei etwas über Kapselung, Klassendesign und so weiter lernen kannst. Vorausgesetzt, du versuchst den Folgefehler durch Nachdenken zu lösen, anstatt durch wildes Tippen irgendwelcher Zeichensequenzen.

    *: Die du leider unvollständig wiedergibst. Du hast bloß ein paar der letzten Zeilen der Meldung gepostet. Du hast gar nicht erst versucht, die Fehlermeldung zu verstehen, sonst wäre dir das nicht passiert 👎 . Wenn du versucht hättest, sie zu verstehen (denk dran: Fehlermeldungen von oben nach unten zu lesen!), hättest du als erste Meldung ein relativ klares

    ‘std::vector<kunde>::iterator’ has no member named ‘name’
    

    (GCC-Fehlermeldung, dein Microsoftcompiler hat sicher etwas ähnliches ausgegeben) erhalten. Was ganz genau das ausdrückt, was ich oben erklärt habe.



  • Rein zu deiner Information (bezüglich deines letzten Satzes), leider nicht.
    er sagt genau das selbe nur mit "->" statt mit "."
    (45): error C2059: Syntaxfehler: '->'

    Ich werd mir deine Antwort noch paar mal durchlesen müssen, mal schauen.


  • Mod

    AnfängerPlusPlus schrieb:

    Rein zu deiner Information (bezüglich deines letzten Satzes), leider nicht.
    er sagt genau das selbe nur mit "->" statt mit "."
    (45): error C2059: Syntaxfehler: '->'

    🙄 Code? Das ist das letzte Mal, dass ich eine Gegenfrage dieser Art stelle. Das nächste Mal antworte ich einfach gar nicht mehr, wenn die Frage ohne Gegenfragen nicht beantwortbar ist.



  • Genau der selbe Code wie oben. in der if bedingung, egal ob ich "." oder "->" mache, er sagt entweder syntaxfehler "->" oder syntaxfehler "."



  • Krass es klappt, danke! 😃



  • AnfängerPlusPlus schrieb:

    Krass es klappt, danke! 😃

    Offensichtlich war es doch nicht der selbe code. Daher auch die Mahnung von Sepp Code zu posten nicht zu beschreiben. Jetzt wissen andere Anfänger immer noch nicht, was Dein Problem war und wie Deine Lösung aussieht.


Log in to reply