2015-02-11 176 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