2016-02-28 54 views
-1

我有問題讓我的重載構造函數工作。繼續收到一個問題,說只有一個拷貝構造函數和析構函數。我應該使用私人枚舉技術,因此使用成員函數如setWeaponSword()(最後四個函數)。私人枚舉與公共重載構造函數

這裏是我的類聲明:

class Knight{ 

public: 
    enum Race{ ALTMER, IMPERIAL, KHAJIIT }; 
    Knight(Race newRace, short int newHealth, short int newStamina, Weapon newWeapon); 
    Knight(const Knight &copiedKnight); 
    ~Knight(); 
    void setRace(const Race newRace); 
    Race getRace(); 
    void setHealth(const short int newHealth); 
    short int getHealth(); 
    void setStamina(const short int newStamina); 
    short int getStamina(); 
    void setWeaponBow(); 
    bool isWeaponBow(); 
    void setWeaponSword(); 
    bool isWeaponSword(); 
private: 
    enum Weapon { BOW , SWORD}; 
    Race race; 
    short int health; 
    short int stamina; 
    Weapon weapon; 
}; 

這裏是它的簡單的成員函數文件:

//Defualt values for variables Needed 


Knight::Knight(Race newRace, short int newHealth, short int newStamina, Weapon newWeapon) : newRace(IMPERIAL), newHealth(50), newStamina(35), newWeapon(SWORD) 
{ 
    setRace(newRace); 
    setHealth(newHealth); 
    setStamina(newStamina); 
} 

我的思維過程是。如果我找不到它,我無法通過Weapon。這就是爲什麼我認爲我必須使用我的類中的最後四個函數來操縱數據才能得到它。我不知道如何。請讓我知道一些基本知識。

+0

什麼是錯誤,它發生在哪裏?另外,通過非const引用來獲取副本是非常奇怪的。 –

+0

也許你的編譯器知道Skyrim屬於Nords,並且在你包含它們之前它拒絕編譯你的程序。 –

+0

@JamesRoot在重載構造函數的類聲明中發生。 – DrakeJacks

回答

1

我建議這樣做,作爲一個開始:

private: 
    enum Weapon { NO_WEAPON, BOW , SWORD}; 
    Race race; 
    short int health; 
    short int stamina; 
    Weapon weapon{NO_WEAPON}; 

然後,你並不需要通過武器到構造函數。除非你有一個,否則該類將默認爲NO_WEAPON。

考慮刪除其他參數並用默認值替換它們。一個接受一堆int的構造函數可能容易出錯。

編輯:如果您使用的是較舊的編譯器,則不能將{NO_WEAPON}放入類中。相反,你必須在你的構造函數中初始化它:

 Knight::Knight(........) : weapon(NO_WEAPON) 
    { ... 
+0

所以我編輯了我的構造函數,我知道說它不知道類文件中的行上的數據類型'weapon'。 – DrakeJacks