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

时间:2014-11-18 23:31:29

标签: c++ class enums

我已定义此数据类型

 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没有命名类型。

2 个答案:

答案 0 :(得分:0)

我告诉你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;
    }
};

这是你的main.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;
}

答案 1 :(得分:0)

预C ++ 11中的枚举只是定义整数(常量)值的一种方法。您的功能应该如下所示,例如

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

enum的成员与整数常量一一对应,在您的情况下,枚举从默认值0开始,因此Rank2为0,Rank3是1等等。

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