reference const_reference L-value R-value



  • Hallo zusammen,

    ich mal wieder mit einer Frage über guten Stil,

    ich hatte aus vorgegebenen Code ein Struct wie folgt

    template <int dim> 
      struct PointHistory
      {
          SymmetricTensor<2,dim> old_stress;
      };
    

    daraus aber eine simple Klasse gemacht mit getter und setter.

    Nun gibt es aber eine Stelle im Code, die sah mit struct so aus.

    local_quadrature_points_history->at(q).old_stress = rotated_new_stress;
    

    Mit der neuen PointHistory-Klasse sieht die so aus:

    local_quadrature_points_history.at(q).setOldStress( rotated_new_stress );
    

    Dann meckert aber der Compiler

    /home/users/guptar5t/ARES/ARES_DE_MOD/ARESv0.04/source/main.cpp(1831): 
    error: the object has cv-qualifiers that are not compatible with the member function
                object type is: const ares::PointHistory<2>
                                    local_quadrature_points_history.at(q).setOldStress( rotated_new_stress );
    

    Ich verstehe das so, dass "local_quadrature_points_history" kein L-value mehr ist und deswegen mit at eine konstante Referenz auf das PointHistory-Objekt zurückgegeben wird.
    Ich habe nun allerdings keine Idee, wie ich das ganze besonders sauber lösen soll. Ich hab daran gedacht eine Referenzrückgabe von oldStress für PointHistory
    hinzuzufügen, weiß aber nicht, ob das sauber ist.
    Gibt es bessere Vorschläge?

    Danke
    Rahul



  • Ok, Entwarnung der Compilerfehler hatte nichts mit den Begriffen aus dem Titel
    zu tun, sondern ich Idiot habe
    local_quadrature_points_history
    vorher const deklariert gehabt und es voll nicht gecheckt.

    Also keine Mühe mehr machen, das hier noch zu lesen oder sonstwie zu verstehen.


Anmelden zum Antworten