Zeiger auf template



  • hallo,
    ich habe folgendes problem:

    ich habe einn zeiger auf ein template der STL

    vector<VectorType> *mem1;
    mem1=new vector<VectorType>;
    

    und möchte nun auf das i-te element zugreifen:

    mem1error=*(mem1)[i];  //geht nicht
    

    fehlermeldung:

    dirneu.h:458: error: no match for ‘operator*’ in ‘**(mem1 + ((long unsigned int)(((long unsigned int)i) * 24ul)))’

    hat jemand ne ahnung wie die korrekte syntax ist ?

    Gruß und Dank

    euler



  • Hallo,
    Du musst einfach nur die Klammern anders setzen:

    mem1error = (*mem1)[i];
    

    So funktioniert es dann bei mir.
    MfG, Jochen



  • wieso hast du überhaupt einen pointer? (wenn es nur um das tauschen geht: diese container haben alle eine spezielle überladung für das swap und somit sind tauschoperationen auch so schon extrem schnell und du musst dich nicht um memory-leaks kümmern.
    übersichtlicher als (*mem1)[0] find ich btw mem1->operator[](0) oder noch besser: std::vector<x>& memory1 = *mem1; ... memory1[0] aber das ist wohl geschmackssache...

    bb



  • alternativ:

    zaiger_auf_vector->at(i)
    

    Sehe ich aber auch so wie unskilled. Überleg mal, ob nicht auch ein Vektor im automatischen Speicher ausreicht. Eventuell musst Du das Ding nicht per new anlegen.



  • krümelkacker schrieb:

    alternativ:

    zaiger_auf_vector->at(i)
    

    Sehe ich aber auch so wie unskilled. Überleg mal, ob nicht auch ein Vektor im automatischen Speicher ausreicht. Eventuell musst Du das Ding nicht per new anlegen.

    naja - at benutze ich ungern - bei jedem fkt-aufruf wieder ein (unnötiger) range-test... das ist zwar vermutlich nicht mal messbar, aber da gehts mir ums prinzip ^^

    bb



  • danke erstmal für die antworten werde es am montag gleich mal ausprobieren.
    motivation für pointer waren hier das ich diese dann per delete wieder löschen kann und so den speicher wieder freigeben kann.



  • unskilled schrieb:

    krümelkacker schrieb:

    alternativ:

    zaiger_auf_vector->at(i)
    

    Sehe ich aber auch so wie unskilled. Überleg mal, ob nicht auch ein Vektor im automatischen Speicher ausreicht. Eventuell musst Du das Ding nicht per new anlegen.

    naja - at benutze ich ungern

    dann halt

    zeiger_auf_vector->operator [](i)
    

    😃

    😉



  • hustbaer schrieb:

    zeiger_auf_vector->operator [](i)
    

    😃

    Hab gerade keinen Compiler hier...
    Funktioniert das wirklich?
    Deine Smilies verwirren mich ^^



  • ja

    operator [] ist eine funktion



  • Funktionieren tut es, ja.
    Smileys weil der Vorschlag nicht ganz ernst gemeint war. Ist ja nicht wirklich "schöner" als die bereits vorgeschlagene Variante (*ptr)[i]


Anmelden zum Antworten