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...


Log in to reply