У меня этот тип данных определен
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;
}
};
Это ваш 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;
}
Перечисления в pre С++ 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
как о простых старых числах. Надеюсь, это понятно.
RankType
быть типом enum или переменной-членомCard
? Вы не можете сделать это оба.