我已定义此数据类型
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没有命名类型。
答案 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
的成员视为普通的旧数字。希望这很清楚。