我正在学习类继承,我正在努力找出一个小问题。我有两个班级
class OrderList {
private:
std::vector<AbstractClass*> elements;
public:
OrderList(const std::vector<AbstractClass*>& list){
// for (auto &i : list)
// elements.push_back(i);
}
OrderList(const OrderList& ol);
OrderList& operator=(const OrderList&);
virtual ~OrderList(){};
};
class DerivedOrderList : public OrderList {
DerivedOrderList(std::vector<AbstractClass*>& list) : OrderList(list){}
DerivedOrderList(const DerivedOrderList&);
DerivedOrderList& operator=(const DerivedOrderList&);
virtual ~DerivedOrderList(){};
};
然后,我的main函数调用DerivedOrderList:
DerivedOrderList myOrderList = DerivedOrderList(myVector);
我收到错误:没有与参数匹配的构造函数“DerivedOrderList :: DerivedOrderList”的实例
可能导致这种情况的原因是什么?
答案 0 :(得分:3)
DerivedOrderList中的构造函数需要公开。
编辑:另见NathanOliver的评论和Rob K关于myVector类型的回答。
答案 1 :(得分:2)
OrderList(const std::vector<AbstractClass*>& list)
采用const引用。
DerivedOrderList(std::vector<AbstractClass*>& list)
采用可变参考。将其更改为DerivedOrderList(const std::vector<AbstractClass*>& list)
此外,我建议typdef
在某个地方vector<AbstractClass*>
。你在很多地方使用它,所以不要重复自己。
ETA:此DerivedOrderList myOrderList = DerivedOrderList(myVector);
也应为DerivedOrderList myOrderList( myVector );
这不是Java或C#。
答案 2 :(得分:1)
std::vector<AbstractClass*>
与std::vector<DerivedClass*>
不同。编译器为每个单独的模板实现创建一个完全不同的类。
为什么不提供重载的构造函数DerivedOrderList::DerivedOrderList(std::vector<DerivedClass*>&)
和OrderList::OrderList(std::vector<DerivedClass*>&)
?