对象类型之间的转换
Conversions between object types
我想做的:
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以接受基类。
相关文章:
- 构造函数和转换运算符之间的重载解析
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 如何在 std::string 和 Aws::String 之间进行转换?
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 在 Rcpp 中的字符串类型之间转换时出错
- 如何声明不同类型的模板化类之间的转换
- C 和 C++ 中的函数指针转换之间的差异
- 与浮点转换之间的规范化整数
- 重新解释强制转换和 C 样式转换之间的 C++ 区别
- C++ get 和类型转换之间的用法有什么区别?我应该使用哪一个?
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- Clang和GCC中不明确基类转换之间的行为差异
- 转换之间的双和字节数组,为传输ZigBee API
- 隐式转换和显式转换之间的区别
- interpret_cast和C样式强制转换之间的区别是什么