C++ 使用枚举数据类型作为类文件中构造函数的数据类型

C++ Using an enum data type as a data type for a constructor in a class file

本文关键字:数据类型 文件 构造函数 枚举 C++      更新时间:2023-10-16

我定义了这个数据类型

 private:
    enum RankType {Rank2, Rank3, Rank4, Rank5, Rank6, Rank7, Rank8,
    Rank9, Rank10, RankJack, RankQueen, RankKing, RankAce };

和这个构造函数:

 public:
  RankType getRank();

但是当我像这样在.cpp文件中调用它时:

RankType Card::getRank()
{
    return Card.RankType;
};

我收到错误:"RankType 不命名类型。

我让你注意到RankType只是枚举的类型(名称)。您已在类中创建了一个enum,但没有 RankType 类型的变量(除非您没有向我们显示)。

正在返回一个类型,您认为return Card.RankType;是什么意思?

我建议你在类之外定义枚举,如果你想将你的卡初始化为某个 RankType,你可以这样做,例如,当你在构造函数中创建新对象时。

这是您定义类的位置:

enum TypeRank {STRONG, WEAK};

class Card
{
private:
    TypeRank _type_rank = STRONG; // default initialisation
public:
    Card(TypeRank type_rank)
    {
        _type_rank = type_rank;
    }
    TypeRank get_rank()
    {
        return _type_rank;
    }
};

这是你的主要.cpp

#include <iostream>
#include "Card.h"
int main(int argc, const char * argv[]) {
    Card card1(STRONG); // notice that the enum TypeRank is included
    // with the file 'Card.h'
    // prints 0, because STRONG is represented by the integer 0!
    std::cout << "This is the rank type: "<< card1.get_rank() << 'n';
    return 0;
}

C++11 之前的枚举只是定义整数(常量)值的一种方式。例如,您的函数应如下所示:

RankType /* this is an integer, really */ Card::getRank()
{
    return Card::RankKing; // this is just syntactic sugar for an integer value 
}

enum的成员与整数常量处于 1 对 1 的对应关系中,在您的情况下,枚举从默认值 0 开始,因此Rank2为 0,Rank3为 1,依此类推。

您应该创建另一个保存卡RankType的变量,例如 RankType rank_type; ,然后使用构造时所需的类型初始化rank_type,最后Card::getRank()应该只返回 rank_type 。同样,只需将enum的成员视为普通的旧数字。希望这是清楚的。