enum InputType
{
VideoInputType,
ImageInputType,
VideoStreamInputType
};
class AbstractInput
{
public:
AbstractInput(std::string);
virtual InputType Type()=0;
std::string GetName();
virtual std::string GetFullName()=0;
std::string Name;
};
class VideoInput : AbstractInput
{
public:
VideoInput(std::string,std::string);
virtual InputType Type();
virtual std::string GetFullName();
std::vector<cv::Mat> Data;
};
class ImageInput : AbstractInput
{
public:
ImageInput(std::string,std::string);
virtual InputType Type();
virtual std::string GetFullName();
cv::Mat Data;
};
我的计划是使用AbstractInput作为函数参数。由于AbstractInput是抽象类,因此不存在任何实例。但在我看来,一个AbstractInput&amp;它指的是可能存在VideoInput或ImageInput。
我的代码不起作用:
VideoInput vidInput(ui->nameLineEdit->text().toStdString(),path.toStdString());
AbstractInput &absInput=vidInput;
错误:
'AbstractInput'是'VideoInput'无法访问的基础
如何实现我想要的行为?
提前致谢。
答案 0 :(得分:11)
您需要公开继承:
//"public" keyword
class VideoInput : public AbstractInput
//"public" keyword
class ImageInput : public AbstractInput
答案 1 :(得分:6)
由于您是私有继承,因此无法访问基类。变化:
class VideoInput : AbstractInput // private inheritance
到
class VideoInput : public AbstractInput // public inheritance
和ImageInput