[英]Abstract base class c++
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;
};
My plan was use AbstractInput as a function parameter. 我的计划是使用AbstractInput作为函数参数。 Since AbstractInput is abstract class no instance could exist. 由于AbstractInput是抽象类,因此不存在任何实例。 But in my opinion an AbstractInput& which refers to either VideoInput or ImageInput may exist. 但在我看来,可能存在一个引用VideoInput或ImageInput的AbstractInput&。
My code that not works: 我的代码不起作用:
VideoInput vidInput(ui->nameLineEdit->text().toStdString(),path.toStdString());
AbstractInput &absInput=vidInput;
Error: 错误:
'AbstractInput' is an inaccessible base of 'VideoInput' 'AbstractInput'是'VideoInput'无法访问的基础
How can I implement the behavior I want? 我该如何实现我想要的行为?
Thanks in advance. 提前致谢。
You need to inherit publicly: 你需要公开继承:
//"public" keyword
class VideoInput : public AbstractInput
//"public" keyword
class ImageInput : public AbstractInput
The base class is inaccessible because you are privately inheriting. 由于您是私有继承,因此无法访问基类。 Change: 更改:
class VideoInput : AbstractInput // private inheritance
to 至
class VideoInput : public AbstractInput // public inheritance
and same for ImageInput
和ImageInput
相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.