私の問題は次のとおりです。抽象基底クラスの特殊化である2つのクラスがあります。 2クラスのコンテナである新しいクラスを作成する必要があります。C++で抽象クラスの配列を含むクラスのoperator []をどのようにオーバーロードできますか?
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;
}
しかし、これはコンパイルされません。私は自分の問題がオペレータの過負荷にあると思うが、良い答えを見つけることができない。
コンパイルエラー:バイナリ「演算子」:「*」型の右側のオペランドをとる(または全く許容される変換は存在しない)が見つかりませんないオペレータ バイナリ「演算子は」:NOオペレータが見つかりませんがとります'B *'型の右オペランド(または許容される変換はありません)
ありがとうございました!
コンパイルエラーを含めてください。 –
関連しています(おそらくエラーの原因ではありません): 'int index'は' size_t index'で、 'const'バージョンは' const Base& 'を返します。 – UnholySheep
構文エラーがかなりありますセミコロン。そして、 'main()'は 'int'を返さなければなりません。 – Mark