抽象基类 C++

3
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是抽象类,因此不存在实例。但在我看来,可能存在一个引用VideoInput或ImageInput的AbstractInput&。

我的代码无法正常工作:

VideoInput vidInput(ui->nameLineEdit->text().toStdString(),path.toStdString());
AbstractInput &absInput=vidInput;

错误:

'AbstractInput'是'VideoInput'无法访问的基类。

我该如何实现我想要的行为?

提前致谢。

2个回答

11

你需要使用public继承:

//"public" keyword
class VideoInput : public AbstractInput

//"public" keyword
class ImageInput : public AbstractInput

6
因为您正在私有继承,所以无法访问基类。请修改代码如下:
class VideoInput : AbstractInput // private inheritance

to

class VideoInput : public AbstractInput // public inheritance

对于 ImageInput,同样适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接