gpt4 book ai didi

C++:编译器错误覆盖来自 DLL 的函数

转载 作者:行者123 更新时间:2023-11-30 01:46:52 25 4
gpt4 key购买 nike

我试图覆盖已在另一个项目的 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:\users\dominik\documents\visual studio 2013\projects\profile\profile\profile.cpp(25): error C2259: 'Receiver' : cannot instantiate abstract class

1> due to following members: 1> 'void HumanInteraction::IInputReceiver::onInput(const T &)' : is abstract

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

Receiver receiver;

当然编译器是对的,在基类中的onInput是一个纯虚函数,但是,我在我的派生类中覆盖了这个函数。因此,类 Receiver 并不像日志所示那样是抽象的。

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

我将非常感谢对这个问题的任何贡献,即使它是“唯一”的评论。

最佳答案

基类中成员函数的签名为

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;

在基类中。

关于C++:编译器错误覆盖来自 DLL 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32531441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com