C ++没有构造函数的实例匹配参数列表?

时间:2015-02-16 20:51:53

标签: c++

我正在学习类继承,我正在努力找出一个小问题。我有两个班级

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”的实例

可能导致这种情况的原因是什么?

3 个答案:

答案 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*>&)