Size()函数编译错误,表示size()未在此范围内声明

时间:2014-05-12 20:47:38

标签: c++ scope

以下是标题:

#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;
}

4 个答案:

答案 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()