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」のアクセスできないベースです

必要な動作を実装するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

11

公に継承する必要があります:

//"public" keyword
class VideoInput : public AbstractInput

//"public" keyword
class ImageInput : public AbstractInput
于 2013-08-07T20:18:43.217 に答える
6

非公開で継承しているため、基本クラスにアクセスできません。変化する:

class VideoInput : AbstractInput // private inheritance

class VideoInput : public AbstractInput // public inheritance

そして同じImageInput

于 2013-08-07T20:18:52.420 に答える