这是我的问题:我有2个类,它们是抽象基类的特化。 我需要创建一个新类,它是这两个类的容器。
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;
}
但这并没有编译。我想我的问题是在操作员[]的超载中,但我似乎无法找到好的答案。
编译错误:二进制&#39;运算符&#39; :没有找到哪个操作符采用类型&#39; A *&#39;的右手操作数。 (或者没有可接受的转换) 二元&#39;运算符&#39; :找不到哪个操作符采用类型&#39; B *&#39;的右手操作数。 (或者没有可接受的转换)
感谢您的帮助!
答案 0 :(得分:1)
在ContainerBase类中,arr被定义为指针数组。这是对的。在这个类中,operator []应该返回指针:
Base*& operator[](int index) { return arr[index]; };
Base* operator[](int index) const { return arr[index]; };
这将解决问题。