2017-10-14 1 views
-1

Hier ist mein Problem: Ich habe 2 Klasse, die Spezialisierung einer abstrakten Basisklasse sind. Ich muss eine neue Klasse erstellen, die ein Container für diese 2 Klasse ist.Wie kann ich Operator [] für eine Klasse mit einem Array einer abstrakten Klasse in C++ überladen?

class Base { 
public: 
    virtual void print() =0; 
}; 

class A : public Base { 
public: 
    void print() { cout << "I am A"; }; 
}; 

class B : public Base { 
public: 
    void print() { cout << "I am B"; }; 
}; 

class ContainerBase { 
public: 
    ContainerBase() { arr = new Base*[10]; }; 
~ContainerBase() { delete[] arr; }; 
    Base & operator[](int index){ return *arr[index]; }; 
    Base & operator[](int index) const { return *arr[index]; }; 
private: 
    Base **arr; 
}; 

int main(){ 
    A a; 
    B b; 
    ContainerBase c; 
    c[0] = &a; 
    c[1] = &b; 
    return 0; 
} 

Aber das kompiliert nicht. Ich vermute, dass mein Problem in der Überlastung des Bedieners liegt [], aber ich kann nicht die gute Antwort finden.

Compilation Fehler: binary 'Betreiber': kein Operator gefunden, die einen rechten Operanden vom Typ 'A *' nimmt (oder es ist kein akzeptabler Umwandlung) binäre 'Betreiber': fand keinen Operator, nimmt ein rechte Operanden vom Typ ‚B *‘ (oder gibt es keine akzeptable Umwandlung)

Vielen Dank für Ihre Hilfe!

+1

Bitte fügen Sie den Kompilierungsfehler ein. –

+0

Zugehörige (aber wahrscheinlich nicht die Ursache der Fehler): 'int index' sollte' size_t index' sein und die 'const' Version sollte eine' const Base & zurückgeben ' – UnholySheep

+0

Sie haben ziemlich viele Syntaxfehler, die damit zu tun haben Semikolons. Und 'main()' muss 'int' zurückgeben. – Mark

Antwort

1

In der ContainerBase-Klasse ist arr als ein Array von Zeigern definiert. Das ist richtig. In dieser Klasse sollte der Operator [] Zeiger zurückgeben:

Base*& operator[](int index) { return arr[index]; }; 
Base* operator[](int index) const { return arr[index]; }; 

Das wird das Problem lösen.

+0

Danke, ich hatte bereits versucht, Zeiger zurückzugeben, aber ich wusste nicht, dass eine Referenz auf einen Zeiger eine Sache war. Das macht jetzt viel mehr Sinn! – Snoopx

Verwandte Themen