我试图重写已在另一个项目中的一个DLL中声明的抽象类,但是,当我尝试初始化重写的类时,我收到编译错误。C++:编译错误覆盖函数从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:\用户\多米尼克\文件\的Visual Studio 2013 \项目\轮廓\轮廓\ profile.cpp(25):错误C2259: '接收器':不能实例化抽象类
1>由于下列成员:1> '无效 HumanInteraction :: IInputReceiver :: onInput(常量Ť&)':是抽象
线profile.cpp(25)试图初始化Receiver的一个实例,就像这样 - 没什么特别的:
Receiver receiver;
当然编译器是正确的onInput在纯虚函数的基类中,但是,我在我的派生类中重写了这个函数。因此,类Receiver不像日志所示的那样是抽象的。
虽然通常我倾向于自己解决我的问题,但我现在完全没有线索,为什么这个错误发生 - 绝对无效。
我将非常感谢任何对此问题的贡献,即使它只是'评论'。