operater[] und '=' zuweisung???



  • habe folgenden Operatior geschreiben:

    // Zugriffoperator
    		int operator[](const int &index){  
    			if(paAlternatives.GetSize()-1 < index)
    				return -1;
    			return paAlternatives.ElementAt(index);
    		}
    

    um diese zu ermöglichen!!
    int i= xxx[0];

    will ich aber nun

    int i=4;

    xxx[0]=i;

    machen kommt fehler...

    errorC2106: '=' Linker Operatnd mud ein L-Wert sein

    muss ich noch nen änhnlich operator überschreiben ????



  • Du könntest die Funktion anpassen, daß sie eine Referenz (int&) zurückgibt anstelle eines Wertes. Allerdings müsstest du dir dann etwas anderes überlegen für die Fehler-Abfrage (ein Literal kannst du nicht per Referenz zurückgeben).



  • Nein, aber du solltest eine Referenz zurückgeben, damit das Schreiben möglich wird.

    //Für "normale" Vektoren
            int& operator[](int index){  
                return paAlternatives.ElementAt(index);
            }
    
            //Für const Vektoren
            const int& operator[](int index) const {  
                return paAlternatives.ElementAt(index);
            }
    

    Die Fehlerabfrage würde ich in der ElementAt-Methode unterbringen und einfach mit nem assert machen. Hart, aber fair.

    edit:
    damn, too slow.



  • ok danke:

    der Operator mit "const" verwende ich wenn ich

    xxx[0]=1;

    mache oder?



  • BorisDieKlinge schrieb:

    ok danke:

    der Operator mit "const" verwende ich wenn ich

    xxx[0]=1;

    mache oder?

    Nein, den "normalen" op brauchst du bei:

    Vector v;
    v[0] = 7;
    

    Den anderen bei:

    const Vector v;
    v[0] = 7;  //Fehler, da op[] ja eine const Referenz zurückgibt.
    

    MfG

    GPC



  • BorisDieKlinge schrieb:

    ok danke:

    der Operator mit "const" verwende ich wenn ich

    xxx[0]=1;

    mache oder?

    Du solltest beide Operatoren implementieren. Welcher verwendet wird entscheidet der Compiler schon korrekt!

    grüße


Anmelden zum Antworten