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

Read an enum from a header file in a .cpp file (C++)

本文关键字:文件 读取 枚举 cpp C++      更新时间:2023-10-16

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

我有一个家庭作业要做:一个单人纸牌游戏。问题是我被困在了必须的枚举步骤。我的牌需要使用枚举。

这是代码:

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中的私有枚举(Sort m_Sorte和Valeur m_Valeur)时,都会出现以下错误:

无法解析符号"m_valeur"

未在此范围中声明"carte"

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

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

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

Carte::Valeur Carte::lireValeur() const

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

auto Carte::lireValeur() const -> Valeur

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