C ++:编译器错误覆盖DLL

时间:2015-09-11 20:12:54

标签: c++ dll compilation compiler-errors

我试图覆盖已在另一个项目中的DLL内声明的抽象类,但是,当我尝试初始化重写类时,我收到编译错误。

这些是visual studio项目,因此,visual studio的内置编译器用于编译所有代码。

我在DLL中有一个模板类:

#ifndef __IINPUT_RECEIVER_H_
#define __IINPUT_RECEIVER_H_

#ifdef HUMANINTERACTION_EXPORTS
#define HUMANINTERACTION_API __declspec(dllexport)
#else
#define HUMANINTERACTION_API __declspec(dllimport)
#endif

namespace HumanInteraction
{
    template<typename T>
    class HUMANINTERACTION_API IInputReceiver
    {
    public:
        virtual ~IInputReceiver()
        {}

        /**
        * Called when new input is received
        */
        virtual void onInput(const T& refInput) = 0;
    };
}

#endif

在另一个使用这个DLL的项目中,我从这个类继承并覆盖它的方法,如下所示:

class Receiver : public IInputReceiver<wchar_t*>
{
public:
    /**
    * Called when new input is received
    */
    virtual void onInput(const wchar_t*& refInput)
    {
        wstring str(refInput);
        wcout << L"Received: " << str << endl;
    }
};

但是当我尝试初始化Receiver类的实例时,我收到以下编译错误;我省略了不相关的日志:

  

1&gt; c:\ users \ dominik \ documents \ visual studio 2013 \ projects \ profile \ profile \ profile.cpp(25):错误C2259:'Receiver':无法实例化抽象类

     

1&GT;由于以下成员:1&gt; “无效   HumanInteraction :: IInputReceiver :: onInput(const T&amp;)':is abstract

line profile.cpp(25)尝试初始化Receiver的实例,就像这样 - 这里没什么特别的:

Receiver receiver;

当然编译器对于纯虚函数中基类的onInput是正确的,但是,我在派生类中重写了这个函数。因此,类Receiver不是日志所示的抽象。

虽然通常我倾向于自己解决我的问题,但我完全没有任何线索这一次为什么会出现这种错误 - 绝对无效。

我非常感谢对这个问题的任何贡献,即使它只是'仅'评论。

1 个答案:

答案 0 :(得分:4)

基类中virtual成员函数的签名是

virtual void onInput(const T& refInput) = 0;

派生类中的那个是

virtual void onInput(const wchar_t*& refInput)

您需要使用的是:

virtual void onInput(wchar_t* const& refInput)

如果你使用

会更有意义
virtual void onInput(T const& refInput) = 0;

在基类中。