Вывести текст перечисления вместо значения C ++ - PullRequest
0 голосов
/ 06 мая 2018

В Form.h у меня есть:

enum Direction {
   NORTH = 0,
   SOUTH = 1,
   EAST = 2,
   WEST = 3,
};

В Play.cpp у меня есть метод, который печатает движение как «PlayerA переехал на СЕВЕР»

void Play::printMove(Direction dir) {
   std::cout << this->getName() << " moved to " << dir << std::endl;
} 

Поскольку это напечатано 0, 1, 2 или 3, я попытался:

void Play::printMove(Direction dir) {
   std::string moveStr;
   switch (dir) {
      case NORTH: moveStr = "NORTH";
      case SOUTH: moveStr = "SOUTH";
      case EAST: moveStr = "EAST";
      case WEST: moveStr = "WEST";
   }
   std::cout << this->getName() << " moved to " << moveStr << std::endl;
}

Но это тоже не сработало. Зачем? Что я могу попробовать?

1 Ответ

0 голосов
/ 06 мая 2018

Вам нужно ключевое слово break, иначе printMove() всегда будет приводить к "WEST". Как только компьютер находит случай, который совпадает, он читает код, который следует до конца через оператор switch. Ключевое слово break указывает компьютеру прекратить чтение и продолжить программу после конечной скобки switch.

void Play::printMove(Direction dir) {
    std::string moveStr;
    switch (dir) {
        case NORTH: 
            moveStr = "NORTH";
            break;
        case SOUTH:
            moveStr = "SOUTH";
            break;
        case EAST:
            moveStr = "EAST";
            break;
        case WEST: 
            moveStr = "WEST";
            break;
    }
    std::cout << this->getName() << " moved to " << moveStr << std::endl;
}
...