无法创建类实例

时间:2011-09-23 13:30:28

标签: c++ class inheritance abstract-class

我有一个单例类,它实现了另外两个抽象类。

我的monkey :: getMonkey失败,因为thisMonkey = new 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;
}

2 个答案:

答案 0 :(得分:3)

你没有表现出足够准确,但先验,你的班级monkey 没有实现基类中的所有纯虚函数。具有尚未被覆盖的纯虚函数的类是抽象的。

答案 1 :(得分:1)

在类anmialnpc中查找声明为pure-virtual的所有方法,并在monkey类中提供它们的实现。它们是猴子类的基类,看起来你还没有完成它们的抽象接口。

纯虚拟类看起来像:

return_type methodName(params)=0;

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

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

将映射到:

monkey::methodName