Zeiger-Problem?
-
hi, ich hab folgendes problem. ich hab eine containerklasse, die Objekte einer basisklasse und unterklasse speichern kann...jedoch bekomme ich immer nur einen einzigen wert raus:
int main() { Container c1; // Container c1 fuellen und ausgeben c1 << Element("A") << Element("B") << Element("C"); for (int i=0; i<c1; i++) { cout << static_cast<const string>(c1[i]) << " "; } cout << endl;
ich bekomme nur den wert "C" raus...
hier teile der klasse:
//Konstruktor zum Erzeugen eines leeren Objektes Container::Container() { Anzahl = -1; // Anzahl auf -1 setzen(Kein Element) t = NULL; t = new Element*[Groesse = 1]; } //Feldoperator Element& Container::operator [] (int i){ if(Anzahl<=0 || Anzahl > Groesse) {throw OutOfBounds();} else return *t[Anzahl]; }; //Zum Speichern der übergebenen Element-Objekte Container& Container::operator<< (const Element &v) { //ggf. Stapel vergroessern Anzahl++; if(Groesse == Anzahl) { Groesse += 10; //Groesse +10 Element** tmp = t; t = new Element* [Groesse]; //umkopieren for (int i = 0; i < Anzahl; i++) { t[i] = tmp[i]; } delete [] tmp; } //Element einschreiben cout<<Anzahl<<endl; t[Anzahl] = v.clone(); //virtual Element* clone() const { return new Element(*this); } return *this; };
ich bin schon ziemlich verzweifelt verstehe echt nicht, warum nur C rauskommt...
-
Das Problem liegt glaube ich hier:
Element& Container::operator [] (int i){ if(Anzahl<=0 || Anzahl > Groesse) {throw OutOfBounds();} else return *t[Anzahl]; };
Du übergibst hier einen Parameter i, aber benutzt ihn überhaupt nicht.
Statdessen benutzt du die Variable Anzahl. Gehe diesen Code noch einmal durch...
-
au weia!!!das ist ja das dümmste, was ich jemals gebracht habe! so ein schönes programm und dann liegt es an diesem mist...boah, wieder 2 stunden meines lebens für umsonst verbracht...grr...