从.cpp文件(C ++)中的头文件中读取枚举

时间:2015-02-11 23:50:28

标签: c++ object enums

首先,对不起我的英语,我是加拿大法国人。

我有一个功课要做:单人纸牌游戏。问题是我陷入了强制性的枚举步骤。我需要使用enum作为我的卡片。

以下是代码:

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_ */

每次我想在我的Carte.cpp中访问私有枚举(Sorte m_sorte和Valeur m_valeur)时,它会给我以下错误:

  

符号'm_valeur'无法解析

  

'carte'未在此范围内声明

我真的不知道它为什么告诉我这个,我包含.h文件所以它不应该知道并且能够使用我的枚举?我在互联网上搜索了很多,我发现有人说我需要创建一个对象。但是,由于我的Carte.h和Carte.cpp是一个对象类,如何创建一个我的Carte类甚至不编译的Carte对象?

如果我不清楚,再次感谢和抱歉!

1 个答案:

答案 0 :(得分:2)

cpp文件中的方法未指定为类的方法。您需要在其定义中指定类名,例如:

Carte::Valeur Carte::lireValeur() const

某些返回的枚举类型也没有使用类名限定,例如。在这个例子中固定的那个不是。返回的类型需要完全限定,因为方法的范围(它们所在的类)尚不清楚;或者您可以使用替代函数语法,其中在方法名称之后指定返回类型,以便知道范围:

auto Carte::lireValeur() const -> Valeur

在我的示例中还修复了const限定符用于方法(因此它位于方法名称之后),而不是返回类型。