kann man das schöner machen?



  • ok, ich hab da mal wieder was verbrochen, und hab keinen peil, wie man das in anständigem c++ schreiben kann(diesmal is es zum glück nur eine zeile :D)

    return group_member[containerID]->operator[](ElementID-checkedID)

    group_member is ein vector mit zeigern auf andere vektoren, und ich empfinde diese Zeile als ur häßlich, da ich den zweiten [] operator als funktion ausschreiben muss, und keinen peil hab, wie ic das umschreiben kann.

    ich hab es schon versucht umzuschreiben,indem ich das ganze auf 2 zeilen aufgeeilt hab, doch das ging derbe schief:

    //irgendwo oben drüber die deklaration von a
    a=*(group_member[containerID]);
    return a[ElementID-checkedID];
    

    eigentlich müsste das Klappen, doch weis der geier wieso, das ganze endete in undefiniertem verhalten^^



  • Also, ich seh nur einen Syntaxfehler :p



  • eigentlich müsste das Klappen, doch weis der geier wieso, das ganze endete in undefiniertem verhalten^^

    Das liegt daran, dass deine zweite Version eine Kopie erstellt und die erste nicht. Schöner gehts wahrscheinlich mit at:

    return group_member[containerID]->at(ElementID-checkedID);
    

    Ansonsten helfen da nur inline Funktionen.



  • das du unbedingt auf ner ")" statt ner "]" rumreiten musst 😉

    egal, fehler gefunden, der * operator im 2. teil stand falsch,dachte, dass er ne kleinere priorität als der [] operator hätte, aber trotzdem frag ich mich, wo der unterschied zwischen *a[b] und *(a[b]) besteht...

    @irgendwer die erste funktion fuktioniert fehlerfrei,die 2. aber nicht.
    at brauch ich nich, da bei mir normalerweise keine bereichsüberschreitung stattfinden kann(ist doch schön, wenn man das sagen kann oder?^^)

    btw: die kopie eines vectors ist absolut ungefährlich, da konnte der fehler nich dran liegen^^



  • [edit]
    oops,falsch geklickt...



  • otze schrieb:

    aber trotzdem frag ich mich, wo der unterschied zwischen *a[b] und *(a[b]) besteht...

    *a[b] == a[0][b]

    *(a[b]) == ((a+b))

    Hoffe ich zumindest*g



  • otze schrieb:

    aber trotzdem frag ich mich, wo der unterschied zwischen *a[b] und *(a[b]) besteht...

    Es gibt keinen, op[] hat eine größere Priorität als der unäre op*, deshalb machen die runden Klammern in deinem Fall gar keinen Sinn.

    @interpreter

    *a[b] == a[b][0];



  • eben, wieso bekomm ich dann aber ein anderes ergebnis wenn ich die klammern verwende?


Anmelden zum Antworten