编译器错误覆盖DLL中的函数



我试图重写一个在另一个项目的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>c:usersdominikdocumentsvisual studio 2013projectsprofileprofileprofile.cpp(25):错误C2259: 'Receiver':无法实例化抽象类

1>由于下列成员HumanInteraction::IInputReceiver::onInput(const T &)':是抽象的

profile.cpp(25)行尝试初始化Receiver的实例,如下所示——这里没有什么特别的:

Receiver receiver;
当然,编译器认为在纯虚函数中基类中的onInput是正确的,但是,我在派生类中重写了这个函数。因此,Receiver类并不像日志显示的那样抽象。

虽然我通常倾向于自己解决问题,但这次我完全不知道为什么会发生这个错误-绝对无效。

我将非常感谢任何对这个问题的贡献,即使它是'only'注释。

基类中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;

最新更新