无法创建类实例
Posted
技术标签:
【中文标题】无法创建类实例【英文标题】:Unable to create class instance 【发布时间】:2011-09-23 13:30:27 【问题描述】:我有一个实现另外两个抽象类的单例类。
我的monkey::getMonkey 失败,因为thisMonkey = new monkey()
返回“不允许抽象类类型“monkey”的对象”。我知道你不能实例化抽象类,但是我的猴子实现了两个抽象类(意味着它不是抽象的……对吧?)
有什么办法解决这个问题?
class monkey : public animal,
public npc
public:
~monkey();
static monkey* getMonkey();
private:
monkey();
static monkey* thisMonkey;
monkey::monkey() ;
monkey::~monkey() ;
/* .. implements the virtual methods of animal and npc ... */
monkey::getMonkey()
if (!thisMonkey)
thisMonkey = new monkey();
return thisMonkey;
【问题讨论】:
【参考方案1】:你没有表现得足够准确,但先验地,你的班级monkey
没有实现基类中的所有纯虚函数。具有未被覆盖的纯虚函数的类是抽象类。
【讨论】:
【参考方案2】:在 anmial
和 npc
类中找到所有声明为纯虚拟的方法,并在猴子类中为它们提供实现。它们是猴子类的基类,您似乎还没有实现它们的抽象接口。
纯虚拟类如下所示:
return_type methodName(params)=0;
您必须在派生类 (monkey) 中提供具有该确切原型的函数和实现。当您有一个指向派生类的指针并调用该“纯虚拟”函数时,这将被调用。即
animal* aptr = new monkey;
aptr->methodName(params);
将映射到:
monkey::methodName
【讨论】:
以上是关于无法创建类实例的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的元类实现失败并出现关于无法创建 NoneType 实例的 TypeError
无法在 WCF Silverlight 服务上创建抽象类或接口的实例
System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类