对象类型之间的转换

Conversions between object types

本文关键字:转换 之间 类型 对象      更新时间:2023-10-16

我想做的:

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;
};
当我声明wh 时,我得到Multiple markers at this line - candidates are: - no matching function for call to 'Control::Control(MedicineRepository&, MedValidator*&)'startApp()处的值
class Control {
public:
    Control(MedRepo* repo, MedValidator* validator);};

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

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

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

但你正在通过MedicineRepository*:

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

还有,不要使用异常说明,它们不好。

您的问题是,MedRepo是一个medicererepository,但medicererepository不是一个MedRepo。您不能在期望使用派生类对象的地方替换基类对象,只能相反(无论如何是安全的)。你需要弄清楚你是否需要指向那个特定派生类的指针,或者指向任何派生类的指针是否可以。对于前者,保持代码原样,并向其发送一个MedRepo对象。如果任何派生类都可以(例如,您只访问基类中的方法),则更改Control以接受基类。