无法创建类实例

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】:

anmialnpc 类中找到所有声明为纯虚拟的方法,并在猴子类中为它们提供实现。它们是猴子类的基类,您似乎还没有实现它们的抽象接口。

纯虚拟类如下所示:

return_type methodName(params)=0;

您必须在派生类 (monkey) 中提供具有该确切原型的函数和实现。当您有一个指向派生类的指针并调用该“纯虚拟”函数时,这将被调用。即

 animal* aptr = new monkey;
 aptr->methodName(params);

将映射到:

monkey::methodName

【讨论】:

以上是关于无法创建类实例的主要内容,如果未能解决你的问题,请参考以下文章

无法创建类 ViewModel kotlin 的实例

JFinal中配置类实例无法创建的问题

无法从另一个命名空间创建类的实例?

为啥我的元类实现失败并出现关于无法创建 NoneType 实例的 TypeError

无法在 WCF Silverlight 服务上创建抽象类或接口的实例

System.MemberAccessException:无法创建 UserNotifications.UNNotificationTrigger 的实例,因为它是一个抽象类