template classe und indexzugriff über operator[]



  • p[i].irgendwas(i)
    

    mein problem:
    p[i]!=K[i]
    ursache: (wahrscheinlich)

    C& operator[](int Zaehl)
     { return K[Zaehl];}
    

    also die operator fkt ,... ich weiß net wie ich die ummodeln soll,.. thx



  • ok habe den source um

    C operator[](int Zaehl) const
     { return K[Zaehl];}
    

    ergänzt,.. jetzt läufts,..



  • zeusosc schrieb:

    ok habe den source um

    C operator[](int Zaehl) const
     { return K[Zaehl];}
    

    ergänzt,.. jetzt läufts,..

    Weißt Du eigentlich, wsa Du da tust, oder bastelst Du nur rum, bis es irgendwie läuft ?

    Dir ist schon klar, dass der operator[]() jetzt eine Kopie des Wertes im Vektor zurückliefert, oder ?

    Probier mal aus, was mit Deinen Vektorwerte passiert, nachdem irgendwas() gelaufen ist .... oder wenn C eine richtig große Klasse ist...

    Gruß,

    Simon2.



  • BTW haben wir immernoch keine Fehlerbeschreibung gesehen...



  • das letztere ergänzung eine kopie zurückliefert ist mir klar,..
    aber wie oben gesagt konnte ich über
    p[i] nicht auf das i-te element von K zugreifen,..
    (trotz

    C& operator[](....
    

    )
    ,... ?? 😕


  • Mod

    Vielleicht solltest du dich mal in unsere Schuhe stellen. Dein code ist nicht mal im Ansatz compilierbar und auch nicht trivial dahingehend zu erweitern. Geht nicht oder Kann nicht, ist keine Fehlerbeschreibung. Eine Fehlerbeschreibung ist zumindest entweder die Diagnose deines Compilers oder eine Beschreibung des konkreten Verhaltens eines ausgeführten Programms. Letzteres kommt hier nicht in Frage, und ersteres mit diesem viel zu stark gekürzten Ausschnitt ebenfalls nicht. Wir sind hier, um konkrete Fragen zu beantworten (die durchaus abstrakter Natur sein dürfen) - nicht um die Frage selbst zu finden.



  • ich kann (konnte) mit p[i] nicht auf den vector K zugreifen !
    Compilerfehler gibt es keine !
    also p[i].irgendwas(i) ist ein methodenaufruf i-ten Objektes im vector K, wobei C::irgendwas(int i) eine Methode ist !

    AUFRUF:

    int main(void)
    {
      A<B> F;
      F.bla();
    }
    

    man siehe
    in F.bla() kommt p[i].irgendwas(3) vor,..

    die methode hat hat er (das prog) aber net ausgeführt,..
    thx,.. leude



  • Sorry,

    bei mir läuft (in Deiner ursprünglichen Version) alles prima (die "..." habe ich mal gefüllt):

    template <class T>
    class A
    {
    private:
       T p;
    public:
       void bla(){ p[0].irgendwas(3);  }
       void getBla(){ cout << "bla = " << p[0].bla << "\n";  }
    };
    
    class C {
    public:
       int bla;
       void irgendwas(int i){ bla=i; cout << "bla(" << i << ")\n"; }
    };
    
    class B
    {
    private:
       vector<C> K;
    public:
       B() { C c; c.bla = -1; K.push_back(c); }
       C& operator[](int Zaehl) { return K[Zaehl]; }
    };
    
    int main(void)
    {
      A<B> f;
      f.bla();
      f.getBla();
    }
    

    ergibt als Ausgabe:
    `

    bla(3)

    bla = 3

    `

    also so, wie es sein sollte:

    • A::bla() ruft B::operator[]() auf
    • für das (per Referenz) zurückgelieferte C wird C::irgendwas() aufgerufen
    • hinterher ist (wie erwartet) das C-Objekt im vector B::K geändert.

    Wenn Du ein Problem hast, liegt es woanders.

    Gruß,

    Simon2.



  • hmm öK,.. dank dir Simon,... 🙂



  • Hi,

    was ar denn jetzt falsch bei Dir ? (nicht, um Dich in die Pfanne zu hauen, sondern eil es mich interessiert)

    Gruß,

    Simon2.



  • wie gesagt,.. ich habe die gleiche variante wie bei dir,.. hat net gefunzt,.. also habe ich zusätzlich

    C operator[](int i) const {...}
    

    eingeführt,..
    und tadaA,.. es hat geklappt,..

    der menschliche fehlerfaktor sei hier mal gänzlich ausgeschlossen *g*

    ich probier es nachher nochmal ohne,..



  • zeusosc schrieb:

    wie gesagt,.. ich habe die gleiche variante wie bei dir,.. hat net gefunzt,.. ...

    Ja - aber meine "funzt" doch .... 😕

    Gruß,

    Simon2.


Anmelden zum Antworten