指针问题“无法实例化抽象类”

时间:2013-10-25 10:31:50

标签: c++

做一个编程家庭作业,我在使用指针时遇到了一些麻烦。我不太清楚问题是什么。

我环顾四周,发现了一些已解决的问题,但我似乎无法弄清楚如何在我自己的代码中实现修复。 (小白)

在我的主要部分我打电话:

MotherShip* m1 = new MotherShip(5, 6);

我收到错误“无法实例化抽象类”。

MotherShip.h:

#include "SpaceShip.h"

class MotherShip : public SpaceShip 
{
public:
    int capacity;

    MotherShip();
    MotherShip(int x, int y, int cap);
    MotherShip(const MotherShip& ms);

    void print();
};

MotherShip.cpp:

#include "stdafx.h"
#include "MotherShip.h"

MotherShip::MotherShip() 
{

}

MotherShip::MotherShip(int x, int y, int cap) 
{

}

MotherShip::MotherShip(const MotherShip& ms) 
{

}

void MotherShip::print() 
{

}

这是我的全部主要内容(我认为这不重要,所以我认为我只是喜欢它)

http://pastie.org/pastes/8429256/text

3 个答案:

答案 0 :(得分:1)

您将两个参数传递给类构造函数,但是您没有定义一个带有两个参数的构造函数。

一种解决方案是:

MotherShip* m1 = new MotherShip(5, 6, 7 /* passing third argument */);

另一种解决方案是定义一个构造函数来获取两个参数:

MotherShip(int x, int y);

答案 1 :(得分:0)

您必须设置cap参数,因为构造函数需要它。

没有构造函数需要两个整数! 使用声明中的默认值

MotherShip(int x, int y, int cap = 123);

或者,作为替代方案,声明并定义另一个采用两个整数的构造函数:

MotherShip(int x, int y);

答案 2 :(得分:0)

没有看就可以猜到了。 C ++中的abstract class是通过添加纯虚函数来实现的。

您确定在基类SpaceShip中有一个纯虚函数,您需要在MotherShip中覆盖它。否则MotherShip也变为abstract,无法实例化。

class SpaceShip
{
public:
    virtual void DoSomething() = 0; //override this with some implementation in MotherShip
};