我正在尝试做什么:
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);};
我该如何解决这个问题?我希望代码量足够,如果需要更多我会添加。
答案 0 :(得分:0)
Control
的构造函数采用MedRepo*
参数:
Control(MedRepo* repo, MedValidator* validator);};
但是你传递的是MedicineRepository*
:
MedicineRepository* repo= new MedRepo() ;
//create controller
Control wh(repo, val);
另外,不要使用例外规范,它们是bad。
答案 1 :(得分:0)
您的问题是MedRepo是一个MedicineRepository,但MedicineRepository不是MedRepo。您不能替换期望派生类对象的基类对象,只能反向(安全地,无论如何)。您需要弄清楚是否需要指向特定派生类的指针,或者指向任何派生类的指针是否正常。对于前者,请保留您的代码,并将其发送给MedRepo对象。如果任何派生类都会这样做(即你只是从基类访问方法),那么改为Control来接受基类。