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!
Bitte fügen Sie den Kompilierungsfehler ein. –
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
Sie haben ziemlich viele Syntaxfehler, die damit zu tun haben Semikolons. Und 'main()' muss 'int' zurückgeben. – Mark