C ++ Использование типа данных enum в качестве типа данных для конструктора в файле класса

0

У меня этот тип данных определен

 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
    должен ли RankType быть типом enum или переменной-членом Card ? Вы не можете сделать это оба.
  • 0
    Мой плохой, это была одна из моих попыток исправить это. это должна быть RankType Card :: getRank (), то есть строка с ошибкой
Теги:
class
enums

2 ответа

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;
}
  • 0
    весь код здесь pastebin.com/YNmJ4auX я понимаю, что вы говорите, я просто не понимаю, как бы это исправить ...
  • 1
    Спасибо за помощь
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 как о простых старых числах. Надеюсь, это понятно.

  • 0
    огромное спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню