使用抽象类类型的c ++传递对象给出错误:不是GeneralDriverInterface

时间:2016-02-14 13:51:35

标签: c++ interface pure-virtual

我有简单的通用界面,如下所示:

Class GeneralDriverInterface 
{
public:
virtual void Init() = 0;
};

然后我有一个类使用初始化GeneralDriverInterface接口的子类之一。

 class DriverTest : public GeneralDriverInterface 
    {
        public: 
        DriverTest();
        virtual void Init();
        bool TestMe();

    }

    void DriverTest::Init()
    { 
       //init driver stuff 
    }

    bool DriverTest::TestMe()
    { 
       //test driver stuff 
    }

现在使用这个DriverTest类,它通过函数

在Class中初始化
// in the Processing.h header there is :

    GeneralDriverInterface* m_GeneralDriverInterface;
    void Processing::InitDriver(GeneralDriverInterface* _GeneralDriverInterface)
    {
       m_GeneralDriverInterface = _GeneralDriverInterface;
       m_GeneralDriverInterface->Init();
       m_GeneralDriverInterface->TestMe();  // The problematic call !! where it failed in compilation 
    }

它通过类GeneralFactory中的构造函数获取其Driver类,如下所示:

GeneralFactory::SetProcessingDriver()
{
    GeneralDriverInterface pGeneralDriverInterface = new DriverTest()
    m_pProcessing->InitDriver(pGeneralDriverInterface );
}

好吧我尝试使用抽象界面尽可能通用,但我得到:

 error C2039: 'TestMe' : is not a member of 'GeneralDriverInterface'
1>        g:\project\GeneralDriverInterface.h(6) : see declaration of 'GeneralDriverInterface'

我的问题是,我是否需要包含即将在已实现的类中使用的所有函数?

2 个答案:

答案 0 :(得分:0)

  

我的问题是,我是否需要包含即将在已实施的课程中使用的所有功能?

是的,您需要通过界面指针或参考包含使用所需的所有功能。

在派生界面的类中实现的任何其他函数都不需要在那里声明。

您仍然可以使用p[0]malloc来获取实现类的指针或引用。

答案 1 :(得分:0)

+nan.0的类型为range

班级m_GeneralDriverInterface没有方法GeneralDriverInterface

  

我是否需要包含即将使用的所有功能   实施了课程?

是的,是的,你这样做。

编译器如何知道它应该调用哪种方法?