Aufgaben für C++
-
fr33g schrieb:
Oki doki, dann überleg ich mir mal was, bzw verinnerliche erst mal Qt richtig und erstelle dann eine sinvolle anwendung=)
Hab jetzt mal noch eben kurz Tic Tac Toe in der Konsole gemacht:-P
Mal eben kurz gemacht?
Kann ich mal einen Screenshot sehen oder sogar den Code.Gruß,
Fred
-
Du kannst auch eine Adressenverwaltung schreiben. Also verschiedene Leute speichern (mit Namen, Strasse, PLZ, Wohnort, Telefonnummer, E-Mail, ...). Dann Funktionalität hinzufügen wie Einträge suchen, nach einem Kriterium sortieren, Einträge löschen, etc.
Dabei hast du eine gute Gelegenheit, dich mit der STL auseinanderzusetzen. Du kannst verschiedene Komponenten davon einsetzen: Container für die Speicherung, Iteratoren zur Ausgabe von allen Adressen, Algorithmen für Dinge wie Sortieren oder Suchen. Ausserdem kannst du später leicht GUI hinzufügen. Schau einfach, dass du die Logik unabhängig von irgendwelchen GUI-Elementen schreibst.
-
Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was

-
snake_game schrieb:
Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was

Dann aber wenigstens mit der SDL... Konsole wäre ja voll wuäh

-
Erst mal Danke für die Ideen;-)
Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:
main.cpp
#include <string> #include <iostream> #include <iomanip> #include <vector> #include "classFeld.h" #include "funktionen.h" using namespace std; int main() { cout << setw(60) << "Herzlich Willkommen zu Tic Tac Toe\n"; cout << setw(56) << "Enter druecken zum Starten!"; cin.get(); vector<Feld> Felder(9); int x = 1; int y = 1; int k = 0; for ( int i = 0; i < 3; ++i ) { x = 1; for ( int j = 0; j < 3; ++j ) { Felder[k] = Feld(x,y); ++x; ++k; } ++y; } ausgabe(Felder); while(true) { setP1(Felder); ausgabe(Felder); if ( checkP1(Felder) ) break; if ( draw(Felder) ) break; setP2(Felder); ausgabe(Felder); if ( checkP2(Felder) ) break; if ( draw(Felder) ) break; } }funktionen.h
#ifndef FUNTKIONEN_H_INCLUDED #define FUNTKIONEN_H_INCLUDED #include <vector> #include "classFeld.h" void ausgabe(std::vector<Feld>); void setP1(std::vector<Feld>&); void setP2(std::vector<Feld>&); bool checkP1(std::vector<Feld>); bool checkP2(std::vector<Feld>); bool draw(std::vector<Feld>); #endif // FUNTKIONEN_H_INCLUDEDfunktionen.cpp
#include "classFeld.h" #include "funktionen.h" #include <iostream> #include <iomanip> #include <string> #include <vector> using namespace std; void ausgabe(vector<Feld> Felder) { int k = 0; for ( int i = 0; i < 3; ++i ) { cout.width(41); for ( int j = 0; j < 3; ++j ) { cout << Felder[k].getZeichen(); ++k; } cout << "\n"; } } void setP1(vector<Feld>& Felder) { cout << "Geben sie(P1) die x und y Achse an(1-3)\n"; int x; int y; cin >> x; cin >> y; if ( ( x < 1) || ( x > 3 ) || ( y < 1 ) || ( y > 3 ) ) { cout << "Ungueltige Eingabe!\n"; setP1(Felder); } bool treffer = true; string zeichen = "X "; int i = 0; while (true) { if ( ( Felder[i].getX() == x ) && ( Felder[i].getY() == y ) ) { if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) ) { cout << "Dort wurde schon hingeschossen\n"; setP1(Felder); } Felder[i].setXX(treffer); Felder[i].setZeichen(zeichen); break; } ++i; } } void setP2(vector<Feld>& Felder) { cout << "Geben sie(P2) die x und y Achse an(1-3)\n"; int x; int y; cin >> x; cin >> y; if ( ( x < 1) || ( x > 3 ) || ( y < 1 ) || ( y > 3 ) ) { cout << "Ungueltige Eingabe!\n"; setP1(Felder); } bool treffer = true; string zeichen = "O "; int i = 0; while (true) { if ( ( Felder[i].getX() == x ) && ( Felder[i].getY() == y ) ) { if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) ) { cout << "Dort wurde schon hingeschossen\n"; setP2(Felder); } Felder[i].setOO(treffer); Felder[i].setZeichen(zeichen); break; } ++i; } } bool checkP1(vector<Feld> Felder) { if ( ( Felder[0].getXX() == true ) && ( Felder[1].getXX() == true ) && ( Felder[2].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[3].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[5].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[6].getXX() == true ) && ( Felder[7].getXX() == true ) && ( Felder[8].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[0].getXX() == true ) && ( Felder[3].getXX() == true ) && ( Felder[6].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[1].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[7].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[2].getXX() == true ) && ( Felder[5].getXX() == true ) && ( Felder[8].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[0].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[8].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } else if ( ( Felder[2].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[6].getXX() == true ) ) { cout << "P1 hat gewonnen!\n"; return true; } return false; } bool checkP2(vector<Feld> Felder) { if ( ( Felder[0].getOO() == true ) && ( Felder[1].getOO() == true ) && ( Felder[2].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[3].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[5].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[6].getOO() == true ) && ( Felder[7].getOO() == true ) && ( Felder[8].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[0].getOO() == true ) && ( Felder[3].getOO() == true ) && ( Felder[6].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[1].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[7].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[2].getOO() == true ) && ( Felder[5].getOO() == true ) && ( Felder[8].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[0].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[8].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } else if ( ( Felder[2].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[6].getOO() == true ) ) { cout << "P2 hat gewonnen!\n"; return true; } return false; } bool draw(vector<Feld> Felder) { int check = 0; for ( int i = 0; i < 9; ++i ) { if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) ) ++check; } if ( check == 9 ) { cout << "Unentschieden!\n"; return true; } return false; }classFeld.h
#ifndef CLASSFELD_H_INCLUDED #define CLASSFELD_H_INCLUDED #include <string> class Feld { public: // Konstruktoren und Destruktor Feld(); Feld(int x, int y); ~Feld(); // Zugriffsfunktionen int getX() const { return itsX; } void setX(int x); int getY() const { return itsY; } void setY(int y); bool getXX() const { return itsXX; } void setXX(bool XX); bool getOO() const { return itsOO; } void setOO(bool OO); std::string getZeichen()const { return itsZeichen; } void setZeichen(std::string zeichen); private: int itsX; int itsY; bool itsXX; bool itsOO; std::string itsZeichen; }; #endif // CLASSFELD_H_INCLUDEDclassFeld.cpp
#include "classFeld.h" #include <string> using namespace std; Feld::Feld() { } Feld::Feld(int x, int y): itsX(x), itsY(y) { itsXX = false; itsOO = false; itsZeichen = ". "; } Feld::~Feld() { } void Feld::setX(int x) { itsX = x; } void Feld::setY(int y) { itsY = y; } void Feld::setXX(bool XX) { itsXX = XX; } void Feld::setOO(bool OO) { itsOO = OO; } void Feld::setZeichen(string zeichen) { itsZeichen = zeichen; }Glaubst dus jetzt

Gut ich weiß die Funktion zum prüfen ob einer gewonnen hat hätte ich besser aufsetzen können:D
-
Kóyaánasqatsi schrieb:
snake_game schrieb:
Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was

Dann aber wenigstens mit der SDL... Konsole wäre ja voll wuäh

Lieber mit SFML, da hat man zumindest C++ und die Bibliothek ist einfacher zu verwenden

Kann man allerdings auch gut über Qt oder ein solches Framework machen. Einen Timer setzen und bei jedem Tick halt die Logik berechnen und zeichnen.Grüssli
-
@Dravere
Ich habe extra SDL gesagt, weil ich finde, dass die SDL einfach einfacher ist... Ich finde das man als Anfänger dort die Abläufe schneller versteht
-
Kóyaánasqatsi schrieb:
@Dravere
Ich habe extra SDL gesagt, weil ich finde, dass die SDL einfach einfacher ist... Ich finde das man als Anfänger dort die Abläufe schneller versteht
Man versteht vielleicht schneller, wie es hinter der Bibliothek aussieht, aber die Verwendung der Bibliothek ist bei weitem nicht einfacher. Siehe zum Beispiel auch hier:
http://www.sfml-dev.org/forum/viewtopic.php?p=11355#11355
(auch die Beiträge davor und danach, war nur eine der guten Antworten auf den SDL Code)Die Frage ist nun:
1. Will man die Bibliothek verwenden oder verstehen wie sie funktioniert? Normalerweise will ich sie in erster Linie verwenden
2. Was heisst "schneller"? Gut, du verstehst schneller wie die SDL Bibliothek funktioniert, dass geht aber immer noch deutlich länger, bis du mit SFML bereits schon gut funktionierende aktzeptable Ergebnisse hast. Zudem musst du bei SDL lernen, wie sie funktioniert, sonst kannst du mit SDL nicht umgehen, während bei SFML dir alles schön verborgen bleibt, du die Bibliothek aber trotzdem prima verwenden kannst.Hmm, wird nun aber sehr Off-Topic ... und ist natürlich vielleicht auch etwas subjektiv *g*
Grüssli
-
Alleine schon weil SFML in modernem C++ und SDL in C geschrieben ist, würde ich mir wenn schon ersteres anschauen. Der Threadtitel heisst ja "Aufgaben für C++". Von den anderen Vorteilen von SFML mal ganz abgesehen...
Aber um sich in C++ weiterzubilden, kommt man meines Erachtens schneller zu Resultaten, wenn man sich auf die Sprache konzentriert und Grafik oder GUI vorerst beiseite lässt.
-
fr33g schrieb:
Erst mal Danke für die Ideen;-)
Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:
Und den Code hast Du mal eben geschrieben?
Du verarscht uns hier, ich glaube Du willst Dich hier nur feiern lassen.
In meinen Augen bist Du ein Voll-Spinner.
Och man, ich weiß nicht mehr was ich programmieren soll, heute Vormittag habe ich SP3 programmiert jetzt bin ich an Windows 7 dran, nur was soll ich morgen machen?
Du hast doch einen an der Waffel.
-
Fred Marder schrieb:
fr33g schrieb:
Erst mal Danke für die Ideen;-)
Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:
Und den Code hast Du mal eben geschrieben?
Du verarscht uns hier, ich glaube Du willst Dich hier nur feiern lassen.
In meinen Augen bist Du ein Voll-Spinner.
Och man, ich weiß nicht mehr was ich programmieren soll, heute Vormittag habe ich SP3 programmiert jetzt bin ich an Windows 7 dran, nur was soll ich morgen machen?
Du hast doch einen an der Waffel.Aber sonst gehts noch

Natürlich hab ich das selber geschrieben, in ner kurzen Zeit.
Was ist eigentlich dein Problem, du wolltest doch das ich den Code reinschreib und dass habe ich jetzt gemacht, wenn du es mir net glaubst kann ich auch nichts dafür.
Brauchst mich hier aber net dumm anmachen und beleidigen, nur weil du vll probleme mit dir selber hast.
Also bitte
Edit:
Wenn mir sagst wo ich screenshots hochladen kann, kann ich dir gern von jeder einzelnen datei n screenshot machen, wo steht wann die datei erstellt wurde und dann das letzte mal geändert.
Hat genau 1 Stunde und 21 Minuten gedauert!So:
http://img99.imageshack.us/img99/271/bitteschn.pngWenn es mir jetzt immer noch net glaubst ist es mir auch egal....
Ich weiß ja das es stimmt, außerdem machst du so als wie ich mich hier aufspielen will, ich hab legidlich nach Programmideen gefragt und du wolltest doch den Code sehen.
Komm erst mal mit dir selber klar

Ich weiß ja nicht warum du hier im Forum unterwegs bist, aber ich bin hier um was zu lernen und meine Programmierkentnisse zu verbessern, um Hilfe zu bekommen wenn man nicht mehr weiter weiß.
Klar freut man sich wenn jemand sagt, der Code ist gut oder so, aber ich bin nicht hier um Anerkennung zu bekommen, dafür hab ich eine Freundin, Familie und Freunde im echten Leben.
Weiß ja nicht vielleicht hast du keine Freunde oder so und suchst nur hier Aufmerksamkeit
ich auf jeden Fall nicht.SO aber nun reicht es auch wieder, ist schon genug of Topic:-P
Gruß fr33g
-
Fred Marder schrieb:
Und den Code hast Du mal eben geschrieben?
Du verarscht uns hier, ich glaube Du willst Dich hier nur feiern lassen.
In meinen Augen bist Du ein Voll-Spinner.
Och man, ich weiß nicht mehr was ich programmieren soll, heute Vormittag habe ich SP3 programmiert jetzt bin ich an Windows 7 dran, nur was soll ich morgen machen?
Du hast doch einen an der Waffel.1. Sprach er von jetzt?
2. Ist der Code nichts was man nicht in ein paar Minuten-Stunden tippen kann.
-
Also ich bin mit meinem Adressenbuch schon gut vorangekommen, jedoch häng ich jetzt fest.
Wenn ich das Programm schließe und wieder öffne und dann eine Adresse abfragen will, stürzt das Programm ab.
Hier mal den teil um den es geht:funktionen.cpp
void adresseAnlegen( map<string, Adresse>& Adressen ) { cout << "Geben sie den Vornamen ein: "; string vorname; cin >> vorname; cout << "Geben sie den Nachnamen ein: "; string nachname; cin >> nachname; cout << "Geben sie die Adresse ein: "; string adresse; cin.ignore(); getline( cin, adresse ); cout << "Geben sie die Telefonnummer ein: "; string tele; cin >> tele; cout << "Geben sie die Email-Adresse ein: "; string email; cin>> email; Adressen[vorname] = Adresse(vorname, nachname, adresse, tele, email); // Adresse wird erstellt in der map char* fileName = new char[ vorname.size() + 1 ]; // char Array wird erstellt für die Dateiöffnung strcpy( fileName, vorname.c_str() ); // kopieren des strings in das char Array ofstream fout( fileName, ios::binary ); if( !fout ) cout << "Die Datei konnte nicht zum Schreiben geöffnet werden!\n"; else { fout.write( ( char* )& Adressen[vorname], sizeof Adressen[vorname] ); // Adresse in eine eigene Datei schreiben } fout.close(); delete[] fileName; } void auslesenVorname( map<string, Adresse>& Adressen ) { cout << "Geben sie den Vornamen ein den sie Suchen: "; string vorname; cin >> vorname; char* fileName = new char[ vorname.size() + 1 ]; // char Array erzeugen für die Dateiöffnung strcpy( fileName, vorname.c_str() ); // kopieren des string in das char Array ifstream fin( fileName, ios::binary ); if ( !fin ) cout << "Datei konnte nicht zum lesen geoeffnet werden!\n"; else { fin.read( ( char* )& Adressen[vorname], sizeof Adressen[vorname] ); cout << Adressen[vorname].getVorname() << "\n"; cout << Adressen[vorname].getNachname() << "\n"; cout << Adressen[vorname].getAdresse() << "\n"; cout << Adressen[vorname].getTele() << "\n"; cout << Adressen[vorname].getEmail() << "\n\n\n"; fin.close(); } delete[] fileName; }Also wenn eine Adresse erstellt wird wird sie in einer eigenen Datei gespeichert, so dass ich sie eg wenn das Programm neu gestartet wird, öffnen kann, dies funktioniert jedoch nicht.
Ich kann sie nur öffnen wenn ich sie zuvor im gleichen Programmstart erzeugt habe.Hoffe ihr könnt mir helfen=)
Wenn soweit alles läuft will ich dann noch einbauen, dass man auch nach Nachnamen suchen kann und dass alle sortiert ausgegeben werden und so weiter:-P
-
@Fred Marder
So toll ist der Code jetzt auch nicht und wegen sowas anfangen andere Leute zu beleidigen, finde ich überhaupt nicht nett. Es stellt sich eher die Frage ob du hier der Anfänger bist, wenn du den Code so unglaublich findest o0.@fr33g
Wie meinst du? Zeig mal deinen kompletten Code.
-
Das ist ja mal kompliziert

char* fileName = new char[ vorname.size() + 1 ]; // char Array erzeugen für die Dateiöffnung strcpy( fileName, vorname.c_str() ); // kopieren des string in das char Array ofstream fout( fileName, ios::binary );AFAIK brauchst du für [i,o]fstream keinen char* sondern einen const char*, und das geht ja viel einfacher:
ofstream fout( vorname.c_str(), ios::binary );oder?

-
Ok hab des jetzt mal geändert, ist ja echt viel einfacher:D
Aber laufen tuts leider trotzdem noch net, poste dann mal wie gewünscht alles;-)main.cpp
#include <fstream> #include "classAdresse.h" #include "funktionen.h" using namespace std; int main() { bool stop = false; int auswahl; map<string, Adresse> Adressen; while( !stop ) { menu(auswahl); switch( auswahl ) { case 1: { adresseAnlegen( Adressen ); break; } case 2: { menuAuslesen( Adressen ); break; } case 3: { cout << "Programm wird beendet!"; stop = true; break; } } } }funktionen.cpp
#include "classAdresse.h" #include "funktionen.h" #include <iostream> #include <string> #include <map> #include <fstream> using namespace std; void menu( int& auswahl ) { cout << "Was wollen sie tun:\n"; cout << "Neue Adresse anlegen(1)\n"; cout << "Adresse suchen(2)\n"; cout << "Programm beenden(3)\n"; cin >> auswahl; if( ( auswahl < 1 ) || ( auswahl > 3 ) ) { cout << "Falsche Eingabe!\n"; menu(auswahl); } } void adresseAnlegen( map<string, Adresse>& Adressen ) { cout << "Geben sie den Vornamen ein: "; string vorname; cin >> vorname; cout << "Geben sie den Nachnamen ein: "; string nachname; cin >> nachname; cout << "Geben sie die Adresse ein: "; string adresse; cin.ignore(); getline( cin, adresse ); cout << "Geben sie die Telefonnummer ein: "; string tele; cin >> tele; cout << "Geben sie die Email-Adresse ein: "; string email; cin>> email; Adressen[vorname] = Adresse(vorname, nachname, adresse, tele, email); // Adresse wird erstellt in der map ofstream fout( vorname.c_str(), ios::binary ); if( !fout ) cout << "Die Datei konnte nicht zum Schreiben geöffnet werden!\n"; else { fout.write( ( char* )& Adressen[vorname], sizeof Adressen[vorname] ); // Adresse in eine eigene Datei schreiben } fout.close(); } void menuAuslesen( map<string, Adresse>& Adressen ) { int auswahl; cout << "Wollen sie nach Vorname suchen(1)\n"; cout << "Wollenn sie nach Nachname suchen(2)\n"; cin >> auswahl; if ( ( auswahl < 1 ) || ( auswahl > 2 ) ) { cout << "Falsche Eingabe!\n"; menuAuslesen( Adressen); } switch( auswahl ) { case 1: { auslesenVorname( Adressen ); // Öffnen der Funktion zum Auslesen bzw Suche per Vorname break; } /*case 2: { auslesenNachname( Adressen ); break; }*/ } } void auslesenVorname( map<string, Adresse>& Adressen ) { cout << "Geben sie den Vornamen ein den sie Suchen: "; string vorname; cin >> vorname; ifstream fin( vorname.c_str(), ios::binary ); if ( !fin ) cout << "Datei konnte nicht zum lesen geoeffnet werden!\n"; else { fin.read( ( char* )& Adressen[vorname], sizeof Adressen[vorname] ); cout << Adressen[vorname].getVorname() << "\n"; cout << Adressen[vorname].getNachname() << "\n"; cout << Adressen[vorname].getAdresse() << "\n"; cout << Adressen[vorname].getTele() << "\n"; cout << Adressen[vorname].getEmail() << "\n\n\n"; fin.close(); } }funktionen.h
#ifndef FUNKTIONEN_H_INCLUDED #define FUNKTIONEN_H_INCLUDED #include "classAdresse.h" #include <string> #include <map> #include <fstream> void menu( int& ); void adresseAnlegen( std::map<std::string, Adresse>& ); void menuAuslesen( std::map<std::string, Adresse>& ); void auslesenVorname( std::map<std::string, Adresse>& ); void auslesenNachname( std::map<std::string, Adresse>& ); #endif // FUNKTIONEN_H_INCLUDEDclassAdresse.cpp
#include <string> #include "classAdresse.h" using namespace std; Adresse::Adresse(std::string vorname, std::string nachname, std::string adresse, std::string tele, std::string email) : itsVorname( vorname ), itsNachname( nachname ), itsAdresse( adresse ), itsTele( tele ), itsEmail( email ) { } void Adresse::setVorname( string vorname ) { itsVorname = vorname; } void Adresse::setNachname( string nachname ) { itsNachname = nachname; } void Adresse::setAdresse( string adresse ) { itsAdresse = adresse; } void Adresse::setTele( string tele ) { itsTele = tele; } void Adresse::setEmail( string email ) { itsEmail = email; }classAdressen.h
#ifndef CLASSADRESSE_H_INCLUDED #define CLASSADRESSE_H_INCLUDED #include <string> class Adresse { public: Adresse(){} Adresse(std::string vorname, std::string nachname, std::string adresse, std::string tele, std::string email); ~Adresse(){} std::string getVorname() const { return itsVorname; } void setVorname( std::string vorname ); std::string getNachname() const { return itsNachname; } void setNachname( std::string nachname ); std::string getAdresse() const { return itsAdresse; } void setAdresse( std::string adresse ); std::string getTele() const { return itsTele; } void setTele( std::string tele ); std::string getEmail() const { return itsEmail; } void setEmail( std::string email ); private: std::string itsVorname; std::string itsNachname; std::string itsAdresse; std::string itsTele; std::string itsEmail; }; #endif // CLASSADRESSE_H_INCLUDEDHoffe das hilft zum helfen:D;-)
danke schonmal
-
So wie ich das sehe legst du die Adresse in adresseAnlegen() an, d.h. wenn du das Programm neustartest und adresseAnlegen() nicht ausführst wird die array Vorname nicht initalisiert und beim ausführen von read kommt es zur speicherverletzung.
EDIT: Hab jetzt das update gelesen und weis nicht wie es sich mit einem String verhält, dachte es würden char* verwendet...
-
mhh ok dann hoff ich mal dass jemand anders weiter weiß.
-
fr33g schrieb:
Aber sonst gehts noch

Solche Leute solltest du nicht beachten. Du hättest auch seiner Bitte mit dem Code nicht nachkommen müssen, schliesslich brauchst du hier niemandem was zu beweisen.
fr33g schrieb:
Also ich bin mit meinem Adressenbuch schon gut vorangekommen, jedoch häng ich jetzt fest.
Wenn ich das Programm schließe und wieder öffne und dann eine Adresse abfragen will, stürzt das Programm ab.Ich würde für den Anfang nicht binär, sondern im Textformat schreiben. Das ist nämlich einfacher und das kannst du auch besser debuggen (z.B. indem du mit dem Notepad nachschaust). Verwende hier also die Streamoperatoren und
std::getline()stattwrite()undread(). Du könntest zum Beispiel die einzelnen Eigenschaften einer Adresse mit ; trennen und die Adressen durch Newlines abgrenzen. Überleg dir einfach ein geeignetes Format.Im Weiteren würde ich hier nicht unbedingt eine
std::mapverwenden, da diese die Sortierung auf ein Kriterium beschränkt. Nimm lieber einenstd::vectorund richte dafür verschiedene Sortierkriterien ein, z.B.// 1. Möglichkeit: Funktor/Funktionsobjekt struct SortiereNachVornamen { bool operator() (const Adresse& lhs, const Adresse& rhs) const { return lhs.getVorname() < rhs.getVorname(); } }; // 2. Möglichkeit: Funktion bool SortiereNachVornamen(const Adresse& lhs, const Adresse& rhs) { return lhs.getVorname() < rhs.getVorname(); } // Anwendung: std::vector<Adresse> Adressen; std::sort(Adressen.begin(), Adressen.end(), SortiereNachVornamen()); // 1 std::sort(Adressen.begin(), Adressen.end(), &SortiereNachVornamen); // 2Ausserdem könntest du ein
typedeffür deinen Adressen-Container einrichten, um nicht immer den vollen Namen tippen zu müssen. Das hat auch den Vorteil, dass du leicht den Containertypen auswechseln kannst, ohne die Implementierung ändern zu müssen.typedef std::vector<Adresse> AdressenContainer;Ansonsten siehts schon recht gut aus, du bist auf dem richtigen Weg!
-
Erst mal Danke für deine Hilfe

Also habs jetzt ohne binär gemacht einfach in eine Datei und mir ein Format überlegt und es klappt=)
Muss jetzt nur noch anstatt map nen vector nehmen und das ganze dann Erweitern für die Sortierfunktion.Hab jedoch noch ne Frage, gibt es eine Funktion, dass ich um eine Zeile zurücksprigen kann?
Denn wenn ich nach dem Nachname such und er ihn findet, soll ja die komplette Adresse plus Vorname ausgegeben werden, und der Vorname steht ja logischerweise vor dem Nachname:-P