2014-05-12 36 views
-3

這裏聲明是標題:尺寸()函數編圖的錯誤,說大小()不在此範圍

#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 

這裏是在派生類中的一個我的大小功能,爲每個接口的所有大小功能四類被格式化同時,每個均具有不同的尺寸的值:

int AircraftCarrier::size(void) const 
{ 
    int size = 5; 
    return size; 
} 

,這裏是其中i使用尺寸是其中所述錯誤的引用:

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

我會比函數變量使用不同的名字...... –

回答

0

看起來像是checkConfig是一項免費功能。如果是這種情況,那麼它將使用未定義的免費功能size()。您必須使checkConfig成爲一個成員函數或傳遞給函數,理想情況下爲Ship&

0

那麼,你的checkConfig是不是任何類的成員。這是一個獨立的功能。所以在這種情況下,獨立的size()沒有任何意義,也不會編譯。

size()是你的班級的成員。您需要班級中的一個對象,您可以使用.->運算符爲其調用size()。例如,這是有效的

AircraftCarrier a; 
a.size(); 

但在一些完全無關的代碼(如您checkConfig)中間僅僅size()將無法​​編譯。如果不指定特定對象,則不能調用size()

1

你錯過了在getConfigShip範圍的定義:

bool Ship::checkConfig(int x1, int y1, int x2, int y2) 
{// ^^^^^^ 
    ... 

沒有它,它僅僅是一個非成員函數,並具有任何Ship進不去的成員(如size()。)

+0

哇無法相信我錯過了,在屏幕太久一直盯着,非常感謝你! – user3626743

1
bool checkConfig(int x1, int y1, int x2, int y2) 

這是一個自由函數,而不是成員函數的定義。如果是這樣:

bool Ship::checkConfig(int x1, int y1, int x2, int y2)