做一个编程家庭作业,我在使用指针时遇到了一些麻烦。我不太清楚问题是什么。
我环顾四周,发现了一些已解决的问题,但我似乎无法弄清楚如何在我自己的代码中实现修复。 (小白)
在我的主要部分我打电话:
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()
{
}
这是我的全部主要内容(我认为这不重要,所以我认为我只是喜欢它)
答案 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
};