| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| Type 
 
 
 Anmeldungsdatum: 24.02.2006
 Beiträge: 187
 Wohnort: Dresden
 
 | 
			
				|  Verfasst am: 24.07.2011, 20:55    Titel: [C++] Arbeiten mit vector |   |  
				| 
 |  
				| Hallo Leute, 
 ich bastel gerade etwas mit C++ herum und hab mal eine Frage: (hoffentlich gibt es hier auch den einen oder anderen C++ler
  ) Ich habe mir eine Klasse erstellt und mir wollte nun eine Liste generieren.
 Dabei sollen einige Werte aus einer Datei eingelesen werden, die in einer neuen klasse gespeichert werden und an den vector angehangen werden. Das Ganze soll ungefähr so aussehen:
 
  	  | Code: |  	  | [...] 
 class computer {
 
 private:
 char *titel;
 [...]
 public:
 char *get_titel();
 void set_titel (char *Titel);
 [...]
 }
 [...]
 
 int main (int argc, const char* argv[]) {
 
 vector<computer> liste;
 
 ifstream datei;
 string neu_titel;
 
 datei.open("liste.txt", ios_base::in);
 if (datei) {
 
 while (!datei.eof()) {
 neu_titel = "";
 getline(datei, neu_titel);
 //********
 //Hier ist das Problem:
 liste.push_back(???);
 //********
 }
 }
 datei.close();
 
 for(unsigned int i=0; i < liste.size();i++){
 cout <<liste.at(i).get_titel()<<endl;
 }
 
 }
 | 
 wie kann ich mir denn bei jedem Schleifendurchlauf eine neue Klasse "computer" generieren und diese dann per "set_titel(neu_titel)" bestücken?
 
 Danke schonmal im Voraus.
 MfG Type
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| 28398 
 
 
 Anmeldungsdatum: 25.04.2008
 Beiträge: 1917
 
 
 | 
			
				|  Verfasst am: 24.07.2011, 22:10    Titel: |   |  
				| 
 |  
				| new liste.push_back()
 delete
 
 und nutz' bitte std::string...
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Type 
 
 
 Anmeldungsdatum: 24.02.2006
 Beiträge: 187
 Wohnort: Dresden
 
 | 
			
				|  Verfasst am: 24.07.2011, 22:50    Titel: |   |  
				| 
 |  
				| hm... ich bin nicht sicher was ich machen soll. ich hab mir eine ""Hilfsklasse" erstellt:
  	  | Code: |  	  | [...] 
 class computer {
 
 private:
 char *titel;
 [...]
 public:
 char *get_titel();
 void set_titel (char *Titel);
 [...]
 }
 [...]
 
 int main (int argc, const char* argv[]) {
 
 vector<computer> liste;
 
 ifstream datei;
 std::string neu_titel;
 
 datei.open("liste.txt", ios_base::in);
 if (datei) {
 
 while (!datei.eof()) {
 neu_titel = "";
 getline(datei, neu_titel);
 //*****
 //Neu:
 computer help;
 help.set_titel(str2char(neu_titel) );
 liste.push_back(help);
 //*****
 }
 }
 datei.close();
 
 for(unsigned int i=0; i < liste.size();i++){
 cout <<liste.at(i).get_titel()<<endl;
 }
 
 }
 | 
 Leider ist der Vektor nur komplett mit dem letzten Wert aus der Datei gefüllt (Was ja auch klar ist).
 new und delete wollen bei mir nicht.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Flo aka kleiner_hacker
 
 
 Anmeldungsdatum: 23.06.2006
 Beiträge: 1210
 
 
 | 
			
				|  Verfasst am: 26.07.2011, 19:08    Titel: |   |  
				| 
 |  
				| das ist nicht annähernd klar, und sollte eigentlich auch nicht so sein 
 wenn du ein computer help hast (und kein computer* help), und das push_backst, wird das ding kopiert (implizit, also ohne dass du was machen musst).
 
 sollte eigentlich klappen
 
 
 ehrlich gesagt verstehe ich aber auch dein problem nicht wirklich
 
 
 kauf dir am besten ein C++-buch, oder zieh dir ein tutorial rein
 _________________
 MFG
 Flo
 
 Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
 
 zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| 28398 
 
 
 Anmeldungsdatum: 25.04.2008
 Beiträge: 1917
 
 
 | 
			
				|  Verfasst am: 26.07.2011, 20:36    Titel: |   |  
				| 
 |  
				| Fang doch bitte erstmal an statt char* std::strings zu benutzen. Das sorgt schonmal für 90 % weniger Fehler |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |