继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员



我对这个继承概念有点陌生,我无法弄清楚出了什么问题。我会很乐意得到一些帮助。

所以我有三个类和一个主要类:

class BaseClassPipeline
{
 protected:
   BaseClassPipeline::BaseClassPipeline(void){};
   virtual int executeFilter  (SRV *p_Srv) = 0;
   BaseClassPipeline::~BaseClassPipeline(void){};
};

class filter_A:public BaseClassPipeline
{
**edit: protected and not public**
 **public:**
   filter_A:::filter_A(void);
   int filter_A::executeFilter (SRV *p_Srv){return 1}
   filter_A:::~filter_A(void);
};

class PipelineAttr
{
protected:
    PipelineAttr::PipelineAttr(FILE *cfgFile, SRV *p_Srv){...};
    BaseClassPipeline** PipelineAttr::createPipeline(FILE *cfgFile){...};
    int PipelineAttr::getNumOfFilters(){...};
    PipelineAttr::~PipelineAttr(void){...};
};

class Pipeline:public BaseClassPipeline, public PipelineAttr
{
public:
   Pipeline::Pipeline(FILE *cfgFile, SRV *p_Srv) : PipelineAttr(cfgFile, p_Srv){}
    int Pipeline::executePipeline(SRV *p_Srv);
    int Pipeline::countFilters();
   Pipeline::~Pipeline(void);
};

这是主要的:

void main()
{
 ...
 Pipeline pipe(cfgFile, srv); // trying to create instance of pipeline
}

试图阅读其他一些帖子,但无法弄清楚我做错了什么。

我收到这些消息:

"管道":无法实例化抽象类

"filter_A::filter_A":无法访问类"filter_A"中声明的受保护成员

谢谢。

'Pipeline' : 无法实例化抽象类

您正在继承抽象基类 BaseClassPipeline .这意味着如果你不重写该类的纯虚函数,那么你的派生类也将是抽象的。

class Pipeline:public BaseClassPipeline, public PipelineAttr
{
public:
   Pipeline::Pipeline(FILE *cfgFile, SRV *p_Srv) : PipelineAttr(cfgFile, p_Srv){}
   int executeFilter  (SRV *p_Srv) {}        <<<< Now, you have provided the definition.

"filter_A::filter_A":无法访问类"filter_A"中声明的受保护成员

定义filter_A的正确语法是:-

class filter_A:public BaseClassPipeline
{
 public:
   filter_A();
   int executeFilter (SRV *p_Srv) { return 1; }
   ~filter_A();
};

最新更新