Referenz auf letzte Element einer Vektor



  • Ich moechte erst eine Vector Liste um ein Element vergroessern und dieses dann als Referenz an eine andere Variable uebergeben. Probiert habe ich folgendes:

    CouplerSetupList.resize(CouplerSetupList.size() + 1);
    CurrentCouplerSetup = & CouplerSetupList[CouplerSetupList.size()];
    

    was mir aber folgenden Fehler bringt:

    1>C:\Programme\Microsoft Visual Studio 8\VC\include\vector(690) : error C2248: "CouplerSetupDef::CouplerSetupDef": Kein Zugriff auf private Member, dessen Deklaration in der CouplerSetupDef-Klasse erfolgte.
    1> e:\daten\dev\svn\hibiscus\cpp\advancedbeamshaping\qbeamshaping\src\CouplerStructures.h(162): Siehe Deklaration von 'CouplerSetupDef::CouplerSetupDef'
    1> e:\daten\dev\svn\hibiscus\cpp\advancedbeamshaping\qbeamshaping\src\CouplerStructures.h(161): Siehe Deklaration von 'CouplerSetupDef'
    1> C:\Programme\Microsoft Visual Studio 8\VC\include\vector(689): Bei der Kompilierung der Klassen-template der void std::vector<_Ty>::resize(unsigned int)-Memberfunktion
    1> with
    1> [
    1> _Ty=CouplerSetupDef
    1> ]
    1> e:\daten\dev\svn\hibiscus\cpp\advancedbeamshaping\qbeamshaping\src\CouplerCalculation.h(22): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::vector<_Ty>".
    1> with
    1> [
    1> _Ty=CouplerSetupDef
    1> ]

    Wie mache ich es dann richtig

    Matthias



  • Es scheint, als ob der Copy-Copnstructor und/oder der Zuweisungsoperator des Listenelements privat wären.



  • LordJaxom schrieb:

    Es scheint, als ob der Copy-Copnstructor und/oder der Zuweisungsoperator des Listenelements privat wären.

    ahh, der Konstruktor war privat...



  • CouplerSetupList.back()
    

    liefert eine Referenz auf das letzte Element...


  • Administrator

    pospiech schrieb:

    CurrentCouplerSetup = & CouplerSetupList[CouplerSetupList.size()];
    

    Wenn du CurrentCouplerSetup verwenden willst, dann wird das aber ziemlich sicher knallen. Du greifst hier nämlich auf das Element hinter dem letzten zu.

    Wenn du die Standard-Container verwendest, dann benutze doch die Funktion back :
    http://www.cplusplus.com/reference/stl/list/back.html

    Grüssli



  • pospiech schrieb:

    Vector Liste

    Man darf jetzt zwar raten, ob es sich um einen std::vector oder eine std::list handelt, aber back() gibts gottseidank für beides 😉
    Ebenso wie push_back(), womit das resize() dann auch überflüssig ist.


Log in to reply