2016-04-04 4 views
0

Ich bin ein Anfänger in C++, der lernt, überladene Operationen zu verwenden. In meinem Hauptprogramm habe ich diesen Code:Fehler: Zuweisung der schreibgeschützten Position 'arr2.IntArray :: operator [] (1)' arr2 [1] = 24;

IntArray arr2(3) 
arr2[1] = 24; 

In meinem Kopf, ich habe diesen Code

class IntArray { 
    char *elt; 
    int size 
public: 
    const int& operator[] (int i); 

In meinem CPP, habe ich diesen Konstruktor:

/* one-integer constructor */ 
IntArray::IntArray(int sz) { 
    elt = new char[sz]; 
    for (int i = 0; i<sz; i++) 
    elt[i] = 0; 
    size = sz; 
} 

und diese Index-Operator

/* Index operator */ 
const int& IntArray::operator[] (int i) { 
    if (i < 0) { 
    cout << "warning: value out of bounds" <<endl; 
    return elt[0]; 
    } 
    else if (i > size) { 
    cout << "warning: value out of bounds" <<endl; 
    return elt[size]; 
    } 
    else 
    return elt[i]; 
    } 

ich erhalte diese err oder wenn ich versuche, den Wert 24 auf eine indizierte Position im Array

error: assignment of read-only location ‘arr2.IntArray::operator’ arr2[1] = 24;

etwas zuweisen mache ich falsch?

Antwort

1

Sie geben einen Verweis auf const zurück - das bedeutet, dass es nicht geändert werden kann (es ist ein "schreibgeschützter Ort" pro Fehlermeldung). Aber dann versuchst du es trotzdem zu modifizieren.

Was Sie zu tun gemeint war, einen Verweis auf nicht-const zurück:

int& operator[] (int i) { 
    // same as before 
} 

dies für die richtige Art zu haben, festgelegt werden elt Bedürfnisse zu arbeiten: int*. Schließlich machen Sie ein Array von int s kein Array von char s.


Hinweis: Das Drucken eines Fehlers außerhalb der Grenzen ist nicht sehr hilfreich. Sie sollten lieber eine Ausnahme auslösen oder einfach behaupten, dass der angegebene Index in Grenzen ist.

+0

sicher, aber dann bekomme ich diesen Fehler: Fehler: ungültige Initialisierung von nicht-const Referenz des Typs 'int &' von einem rvalue des Typs 'int' return elt [0]; – flowpoint

+0

@flowpoint Was ist 'elt'? Bitte fügen Sie die Frage hinzu. – Barry

+0

siehe aktualisierten Beitrag – flowpoint

Verwandte Themen