AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[c++] Durch Objektliste iterieren

Ein Thema von Luckie · begonnen am 12. Sep 2008 · letzter Beitrag vom 16. Sep 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: [c++] Durch Objektliste interieren

  Alt 13. Sep 2008, 22:04
So die Änderungen habe ich jetzt gemacht. Jetzt bekomme ich natürlich im Hauptprogramm Fehler. Code ist bisher unverändert, siehe oben.
Code:
e:\c\programme\bank\bank.cpp(34) : error C2228: left of '.begin' must have class/struct/union
        type is ''unknown-type''
e:\c\programme\bank\bank.cpp(34) : error C3861: 'GetKonten': identifier not found
Kunde.cpp
e:\c\programme\bank\kunde.cpp(35) : error C2556: 'const std::list<_Ty> &CKunde::GetKonten(void)' : overloaded function differs only by return type from 'const std::list<_Ty> CKunde::GetKonten(void)'
        with
        [
            _Ty=CKonto
        ]
        e:\c\programme\bank\kunde.h(22) : see declaration of 'CKunde::GetKonten'
e:\c\programme\bank\kunde.cpp(35) : error C2373: 'CKunde::GetKonten' : redefinition; different type modifiers
        e:\c\programme\bank\kunde.h(22) : see declaration of 'CKunde::GetKonten'
Ohm Mann, irgendwie ist das doch ziemlich mühsam mit C++, wenn man keinen Plan hat. Wir machen gerade in der Schule Java und unser lehrer hatte die Idee, damit wir auch was von anderen Sprachen mitbekommen, dass jeder das Programm noch mal in einer Sprache seiner Wahl schreibt. Ich habe C++ genommen, weil wir keinen Delphi Compiler in der Schule haben.

Gut Try-Catch-Blöcke kommen dann noch rein. Ich würde da gerne selber eine Exception werfen wie in Delphi:
Delphi-Quellcode:
except
  on E: ESonstwas do
    raise E.Message;
end;
Aber wie geben ich die Konten wieder frei im Destruktor von CKunde? Da war irgendwas mit delete []. Aber einen geneauen Plan habe ich da im Moment noch nicht.

Wäre nett, wenn ihr mir da noch weiterhelfen könntet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#12

Re: [c++] Durch Objektliste interieren

  Alt 14. Sep 2008, 19:37
Zitat von Luckie:
Wir machen gerade in der Schule Java und unser lehrer hatte die Idee, damit wir auch was von anderen Sprachen mitbekommen, dass jeder das Programm noch mal in einer Sprache seiner Wahl schreibt. Ich habe C++ genommen, weil wir keinen Delphi Compiler in der Schule haben.
??
Zitat von Profil von Luckie:
Luckie
Moderator
Alter: 34
Mißverstehe ich da irgendetwas?


Zitat von Luckie:
Aber wie geben ich die Konten wieder frei im Destruktor von CKunde?
Gar nicht. Deine Liste speichert Objekte, keine Objektreferenzen. Das Aufräumen übernimmt die Liste.
Moritz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: [c++] Durch Objektliste iterieren

  Alt 14. Sep 2008, 20:09
Ok, dann muss ich nur die Kunden wieder freigeben. Aber das geht auch irgendwie mit delete[] oder?

Und der Rest hat schon seine Richtigkeit. Es ist die Berufsschule.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#14

Re: [c++] Durch Objektliste iterieren

  Alt 14. Sep 2008, 23:07
Code:
delete []
wenn es ein Array ist, ein Objekt mit
Code:
delete Objektzeiger
.

Also in deinem Falle
Code:
delete kunde1, konto1, konto2;
Aso und meine Anmerkung mit dem Modifiern meinte ich so:

Code:
class CKunde
{
private:
  std::string _name;
  std::string _vorname;
  std::list<CKonto> _konten;

public:
  CKunde(void);
  ~CKunde(void);

  std::string GetName(void);
  void SetName(std::string Name);
  std::string GetVorname(void);
  void SetVorname(std::string Vorname);
  std::list<CKonto>& GetKonten();
  void AddKonto(CKonto& Konto);
};
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: [c++] Durch Objektliste iterieren

  Alt 14. Sep 2008, 23:23
Zitat von Roachford:
Code:
delete []
wenn es ein Array ist, ein Objekt mit
Code:
delete Objektzeiger
.

Also in deinem Falle
Code:
delete kunde1, konto1, konto2;
Ah, danke.

Zitat:
Aso und meine Anmerkung mit dem Modifiern meinte ich so:
Habe ich schon geändert.

Leider besteht das Problem mit dem iterieren noch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: [c++] Durch Objektliste iterieren

  Alt 16. Sep 2008, 08:06
So, ich sitze wieder in der Schule und versuche immer noch das Problem mit dem Iterieren zu lösen.

Habs, das const war zu viel, da habt ihr mich aber schön geärgert, als ihr das geändert habt.
Michael
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#17

Re: [c++] Durch Objektliste iterieren

  Alt 16. Sep 2008, 10:15
Zitat von Luckie:
das const war zu viel
Keineswegs; vielmehr ist in deinem Code ein const zu wenig. Wenn du eine non-const-Referenz zurückgibst, gibst du nicht nur ein Implementationsdetail preis, sondern zugleich dem Benutzer die Möglichkeit, die Liste direkt zu manipulieren, ohne daß er AddKonto() o.ä. aufrufen müßte.

Über eine konstante Liste kannst du aber natürlich nicht mit std::list<>::iterator, sondern mit std::list<>::const_iterator iterieren. (Für eine nicht konstante Liste funktioniert const_iterator natürlich auch.)
Moritz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

Re: [c++] Durch Objektliste iterieren

  Alt 16. Sep 2008, 10:33
Hm, dann ändere ich das noch mal.

Jetzt funktioniert die Ausgabe nicht mehr:
Code:
for(iterKunden = _kunden.begin(); iterKunden != _kunden.end(); ++iterKunden)
   {
      cout << iterKunden->GetName().c_str() << ", " << iterKunden->GetVorname().c_str() << endl;
      list<CKonto>::const_iterator iterKonten;
      for(iterKonten = iterKunden->GetKonten().begin(); iterKonten != iterKunden->GetKonten().end(); ++iterKonten)
      {
         cout << iterKonten->GetBeschreibung().c_str() << endl;
         cout << iterKonten->GetSaldo() << endl;
      }
      cout << endl;
   }
Zitat:
Fehler 1 error C2662: 'CKonto::GetBeschreibung': this-Zeiger kann nicht von 'const CKonto' in 'CKonto &' konvertiert werden d:\bank\bank_c++2\bank\bank.cpp 48
Fehler 2 error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden. d:\bank\bank_c++2\bank\bank.cpp 48
Fehler 3 error C2662: 'CKonto::GetSaldo': this-Zeiger kann nicht von 'const CKonto' in 'CKonto &' konvertiert werden d:\bank\bank_c++2\bank\bank.cpp 49
Michael
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#19

Re: [c++] Durch Objektliste iterieren

  Alt 16. Sep 2008, 10:43
Zitat von Luckie:
Jetzt funktioniert die Ausgabe nicht mehr:
Damit du die Getter-Methoden deiner Klasse auch für konstante Objekte aufrufen kannst, mußt du sie als const deklarieren:
Code:
class CKunde
{
  ...

public:
  std::string GetName(void) const;
  void SetName(std::string Name);
  std::string GetVorname(void) const;
  void SetVorname(std::string Vorname);
  const std::list<CKonto>& GetKonten() const;
  void AddKonto(CKonto& Konto);
};
Moritz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: [c++] Durch Objektliste iterieren

  Alt 16. Sep 2008, 10:52
Puh, ich weiß schon, warum ich lieber mit Delphi arbiete.

Danke, jetzt geht es.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz