instanzen automatisch hinzufügen
-
das konto das du da aufrufst existiert nur innerhalb der for-schleife
-
Ist ja kein Wunder, denn konto ist ein Zeiger der nach dem Anweisungsblock wieder geloescht wird. Und selbst wenn konto weiter ausserhalb deklariert waere wuerde konto logischerweise nur auf das zuletzt erstellte Konto zeigen.
-
dh ich kann mit den konten auserhalb der for schleife nix machen?
-
wenn deine Bank keine Schalterdame (bzw. Funktion) zur verfügung stellt Zugriff von ausserhalb auf die Konten erlaubt, dann nich ^^
-
Bank::Bank() { ostringstream os; for (int i=0; i<10000; ++i) { os.str(""); os << "Name" << i; Konto k(os.str(), 0.00f, 200.00f); Reiffeisen->konto_Hinzufuegen(konto); } }
-
Bank Raiffaisenbank; for (int i=0; i<1000; i++) { ostringstream s; s << "Konto " << i; Konto k(s.str()); Raffaisenbank.konto_hinzufügen(k); }
-
Du kannst mit dem letzten Konto, das angelegt wird auch was ausserhalb der for-Schleife machen, wenn Du es ausserhalb der for-Schleife anlegst, also davor. Allerdings halt nur mit dem letzten, da *konto nach durchlaufen der Schleife nur noch auf dieses zeigt. Das liesse sich aber leicht mit nem Array aus Pointern auf Konto(s) lösen.
int main() { ostringstream os; Konto *konto[10000]; for (int i=0; i<10000; ++i) { os.str(""); os << "Name" << i; konto[i] = new Konto(os.str(), 0.00f, 200.00f); Reiffeisen->konto_Hinzufuegen(*konto[i]); } //um z.B. das erste erstellte Konto anzuzeigen *konto[0]->display(); }
-
hi attix!!
danke für deine hilfe:
die zeilen mag er net:Reiffeisen->konto_Hinzufuegen(*konto[i]);
error C2664: 'konto_Hinzufuegen' : Konvertierung des Parameters 1 von 'class Konto' in 'class Konto *' nicht moeglichich würde mal sagn das soll so heissen!!???????????:
Reiffeisen->konto_Hinzufuegen(konto[i]);*konto[0]->display();
error C2100: Zeigeroperation ungueltigwie wird das sonst gemacht?? wenn man 100 objekte erstellen muss, zum test! macht man das a mit pointern oder ohne??
cu
-
muss ich dann die ganzen pointer auf die instanzen wieder löschen???
so wie da mach ich es so:Konto *giro = new Konto("Gerald", 0.00f, 200.00f); delete giro;
cu
-
hi, ich hab das nun in den konstruktor von der bank gegeben:
Bank::Bank(unsigned int blz):bankleitzahl(blz) { ostringstream os; // Array aus Pointern auf Konto(s) Konto *konto[1000]; for (int i=0; i<1000; ++i) { os.str(""); os << "Name" << i; konto[i] = new Konto(os.str(), 0.00f, 200.00f); konto_Hinzufuegen(konto[i]); } } damit ich das so in der main verwenden kann: int main() { // Instanz der Klasse Bank erzeugen Bank *Reiffeisen = new Bank(9241); konto[0]->display();
muss ich ja Array aus Pointern auf Konto(s) zurückgeben vom konstruktor oder wie????
cu
-
Konstruktoren können keinen Rückgabewert haben, glaub ich.
Aber du kannst zB sowas hier machen:class Bank { public: Bank(); ~Bank(); Konto** GetKonten(); // Gibt Array aus Zeigern auf Konten zurück private: Konto m_Konten*[1000]; } // Im Konstrktor dann in m_Konten speichern, anstatt ne lokale Variable zurückzugeben. Konot** Bank::GetKonten() { return m_Konten; }
Oder du gibst einen Const-Zeiger auf deinen vector zurück. Dann kann man an dem ncihts verändern, aber auf die Konten zugreifen.
Mir ist noch was aufgefallen: In Konot_Hinzufügen ist ein kleiner Fehler. Wenn die Kontonummer schon existiert, wird keine neue gesucht, sondern einfach die Funktion verlassen, ohne dass das Konto hinzugefügt wurde
-
Konto m_Konten*[1000]; meinst du nicht: Konto *m_Konten[1000]; mein konstruktor schau so aus: Bank::Bank(unsigned int blz):bankleitzahl(blz) { ostringstream os; for (int i=0; i<100; ++i) { os.str(""); os << "Name" << i; m_Konten[i] = new Konto(os.str(), 0.00f, 200.00f); konto_Hinzufuegen(m_Konten[i]); } } dann einfach in der int main so aufrufen: Reiffeisen.GetKonten(); ????? wie kann ich dann auf die konten zugreifen???
-
hm... kann sein, wenns so kompiliert
es soll jedenfalls ein Array aus Zeigern auf Konten sein, und kein Zeiger auf ein Array aus 1000 Konten.
in main kannst du das dann so machen:
Konto** konten = Bank.GetKonten(); konten[1]->Machwas();
-
@maxi:
schau mal dir an obs so passt:
hast gepostet dort:
http://www.rafb.net/paste/results/LQtesl82.htmlcu