2015-02-11 54 views
0

首先,對不起我的英文,我是法語加拿大人。從.cpp文件中的頭文件讀取枚舉(C++)

我有作業要做:紙牌遊戲。問題是我堅持強制枚舉步驟。我需要爲我的卡片使用枚舉。

下面的代碼:

Carte.h:

#ifndef CARTE_H_ 
#define CARTE_H_ 

class Carte 
{ 
public: 

    enum Sorte 
    { 
     coeur, pique, carreau, trefle 
    }; 

    enum Valeur 
    { 
     as, valet, dame, roi 
    }; 

        Carte    (Sorte& pSorte, Valeur& pValeur); 
    Sorte   lireSorte  () const; 
    Valeur  lireValeur  () const; 
    bool   ecrireSorte  (Sorte& pSorte); 
    bool   ecrireValeur  (Valeur& pValeur); 
    static bool validerSorte  (const Sorte& pSorte); 
    static bool validerValeur  (const Valeur& pValeur); 

private: 

    Sorte m_sorte; 
    Valeur m_valeur; 
}; 
#endif /* CARTE_H_ */ 

而這裏的Carte.cpp:

#include "Carte.h" 

using namespace std; 

Carte::Carte(Sorte& pSorte, Valeur& pValeur) 
{ 
    m_sorte = pSorte; 
    m_valeur = pValeur; 
}; 

Carte::Sorte const lireSorte() 
{ 
    return m_sorte; 
}; 

Valeur const lireValeur() 
{ 
    return m_valeur; 
}; 

bool ecrireSorte(Carte::Sorte& pSorte) 
{ 
    bool donneeValide = validerSorte(pSorte); 

    if (donneeValide) 
    { 
     m_sorte = pSorte; 
    } 

    return donneeValide; 
}; 

bool ecrireValeur(Valeur& pValeur) 
{ 
    bool donneeValide = validerValeur(pValeur); 

    if (donneeValide) 
    { 
     m_valeur = pValeur; 
    } 

    return m_valeur; 
}; 

static bool validerSorte(const Sorte& pSorte) 
{ 
    return (pSorte == coeur || pSorte == pique || carreau || trefle); 
}; 

static bool validerValeur(const Valeur& pValeur) 
{ 
    return ((pValeur >= 2 && pValeur <= 10) || (pValeur == as || pValeur == valet || pValeur == dame || pValeur == roi)); 
}; 

#endif /* CARTE_H_ */ 

每次我想訪問私有枚舉(Sorte m_sorte和Valeur m_valeur)在我的Carte.cpp中,它給我以下錯誤:

Symbol 'm_valeur' could not be resolved

‘carte’ was not declared in this scope

我真的不知道爲什麼它在告訴我這個,我包括.h文件所以是不是應該知道和能夠使用我的枚舉?我在互聯網上搜索了很多,我發現有人說我需要創建一個對象。但是,由於我的Carte.h和Carte.cpp是一個對象類,我怎麼能創建一個Carte對象,我的Carte類甚至不能編譯?

如果我不清楚,謝謝並再次抱歉!

回答

2

cpp文件中的方法未指定爲類的方法。你需要在他們的定義中指定類名,例如:

Carte::Valeur Carte::lireValeur() const 

一些返回的枚舉類型不與類名限定或者,如。在這個例子中修復的不是。返回的類型需要完全合格,因爲方法的範圍(它們所在的類)還不知道;或者您可以使用其中的方法名稱後指定的返回類型,這樣的範圍是已知的替代函數語法:

auto Carte::lireValeur() const -> Valeur 

也定格在我的例子是,const限定符的方法(這樣說到後方法名稱),而不是返回類型。

+0

感謝您的回答! 糟糕,我不知道發生了什麼,但#endif在我的.h文件中。 我指定的類這樣的「Valeur常量全權:: lireValeur()」,但現在它說:「在這一行 \t多個標記 - 類型‘Valeur’無法解析 \t - 成員聲明沒有找到 \t - 「 「Valeur'沒有指定類型」 – SkAshe 2015-02-11 23:57:00

+0

@StenSoft另外,enum類型需要用範圍限定,當用作返回值時,正如你在示例中已經闡明的那樣(解釋句子很好)。 – 2015-02-12 00:00:22

+0

添加了解釋並修正了錯誤的'const'限定符的位置 – StenSoft 2015-02-12 00:08:21