0

做一个编程作业,我在指针方面遇到了一些麻烦。我不太确定问题是什么。

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

在我的主要我打电话:

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

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

母舰.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();
};

母舰.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

4

3 回答 3

1

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

一种解决方案是:

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

另一个解决方案是定义一个构造函数来接受两个参数:

MotherShip(int x, int y);
于 2013-10-25T10:35:35.927 回答
0

不用看也能猜出来。abstract class在 C++ 中是通过添加一个纯虚函数来实现的。

你肯定在你的基类SpaceShip中有一个纯虚函数,你需要在MotherShip. 否则MotherShip也变成abstract并且不能被实例化。

class SpaceShip
{
public:
    virtual void DoSomething() = 0; //override this with some implementation in MotherShip
};
于 2013-10-25T12:05:31.780 回答
0

您必须根据构造函数的需要设置 cap 参数。

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

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

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

MotherShip(int x, int y);
于 2013-10-25T10:35:26.337 回答