0

我正在尝试做的事情:

void startApp() {
            //create validator
        MedValidator* val = new MedValidator();
        //create reporsitory
        MedicineRepository* repo= new MedRepo() ;
        //create controller
        Control wh(repo, val);
    ...}

这是使用类型的视图:

 class MedValidator
    {
    public:
        void validate(const Medicine& s) throw(MedException);
    };


class MedicineRepository
{
public: virtual void addMed(Medicine s) ;
};

class MedRepo : public MedicineRepository{
public:void addMed(Medicine s);
protected:
    Vector<Medicine*> MedList;
};

Multiple markers at this line - candidates are: - no matching function for call to 'Control::Control(MedicineRepository&, MedValidator*&)'startApp()声明时得到wh

class Control {
public:
    Control(MedRepo* repo, MedValidator* validator);};

我该如何解决这个问题?我希望代码量足够,如果需要更多我会添加。

4

2 回答 2

0

for 的构造函数Control接受一个MedRepo*参数:

Control(MedRepo* repo, MedValidator* validator);};

但是你正在传递一个MedicineRepository*

 MedicineRepository* repo= new MedRepo() ;
 //create controller
 Control wh(repo, val);

另外,不要使用异常规范,它们很糟糕

于 2013-05-21T19:51:05.647 回答
0

您的问题是 MedRepo 是 MedicineRepository 但 MedicineRepository 不是 MedRepo。您不能在需要派生类对象的地方替换基类对象,只能反过来(无论如何,安全)。您需要确定是否需要指向该特定派生类的指针,或者是否可以使用指向任何派生类的指针。对于前者,请保持您的代码原样并向其发送 MedRepo 对象。如果任何派生类都可以(即您仅从基类访问方法),则将 Control 更改为接受基类。

于 2013-05-21T19:52:38.827 回答