以下是标题:
#ifndef SHIP_H
#define SHIP_H
class Ship
{
public:
virtual ~Ship(void) {}
virtual const char *name(void) const = 0;
virtual int size(void) const = 0;
int getX(int i) const;
int getY(int i) const;
void print(void) const;
bool includes(int x, int y);
int level(void) const;
void decreaseLevel(void);
static Ship *makeShip(char ch, int x1, int y1, int x2, int y2);
protected:
void setPos(int a1, int b1, int a2, int b2);
int lev;
private:
bool checkConfig(int x1, int y1, int x2, int y2);
int x1,y1,x2,y2;
};
class AircraftCarrier : public Ship
{
public:
AircraftCarrier(int x1, int y1, int x2, int y2);
virtual const char *name(void) const;
virtual int size(void) const;
};
class BattleShip: public Ship
{
public:
BattleShip(int x1, int y1, int x2, int y2);
virtual const char *name(void) const;
virtual int size(void) const;
};
class Cruiser: public Ship
{
public:
Cruiser(int x1, int y1, int x2, int y2);
virtual const char *name(void) const;
virtual int size(void) const;
};
class Destroyer: public Ship
{
public:
Destroyer(int x1, int y1, int x2, int y2);
virtual const char *name(void) const;
virtual int size(void) const;
};
#endif
这是我的一个派生类中的size函数,四个类中每个类的所有size函数格式相同,每个都有不同的大小值:
int AircraftCarrier::size(void) const
{
int size = 5;
return size;
}
这里是我使用大小的地方,这是错误引用的地方:
bool checkConfig(int x1, int y1, int x2, int y2)
{
//int s,spaces;
//s = size();
if (x1 == x2)
{
if(size()-1 == y2-y1)
{
return true;
}
else
return false;
}
else if (y1 == y2)
{
if(size()-1 == x2-x1)
{
return true
}
else
return false;
}
else
return false;
}
答案 0 :(得分:1)
您错过了Ship
定义中的getConfig
范围:
bool Ship::checkConfig(int x1, int y1, int x2, int y2)
{// ^^^^^^
...
没有它,它只是一个非成员函数,并且无法访问任何Ship
的成员(例如size()
。)
答案 1 :(得分:1)
bool checkConfig(int x1, int y1, int x2, int y2)
这是一个自由函数,而不是成员函数定义。应该是:
bool Ship::checkConfig(int x1, int y1, int x2, int y2)
答案 2 :(得分:0)
看起来checkConfig
是一个免费功能。如果是这种情况,那么它将使用未定义的自由函数size()
。您必须将checkConfig
作为成员函数或通过,最好是Ship&
函数。
答案 3 :(得分:0)
好吧,你的checkConfig
不是任何一个班级的成员。这是一个独立的功能。因此,在该上下文中,独立的size()
没有任何意义,也不会编译。
size()
是您班级的成员。您需要一个班级的对象,您可以使用size()
或.
运算符为其调用->
。例如,这是有效的
AircraftCarrier a;
a.size();
但是在一些完全不相关的代码(如size()
)中只有checkConfig
将无法编译。如果不指定特定对象,则无法调用size()
。