возврат bool в случае переключателя - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь переключить регистр и наследование в C ++ и обнаружил некоторые проблемы / предупреждения.

Например, у меня есть абстрактный базовый класс. Поле:

Field.h

class Field{
  private:
  FieldType type_;

  public:
  enum FieldType
  {
    GRASS,WATER,STREET,HOME,TOWNHALL
  };
virtual bool checkIsBuildable(Fieldtype type);

Теперь я получаю предупреждения в подклассах Buildings.cpp и Properties.cpp:

  warning enumeration value GRASS,WATER,STREET bit handled in switch

Так как это bool, я просто могу вернуть false или true по умолчанию, и метод не будет работать правильно или? Я просто хочу проверить, например, Дом и Ратуша в Buildings.cpp и Трава, Вода и Улица в Свойствах.

Buildings.cpp

bool Buildings::isBuildable(Field::FieldType type)
{    
   switch(type)
  {
    case Field::HOME:
      return true;
    case Field::TOWNHALL:
      return false;
  }
}

Properties.cpp

 bool Properties::isBuildable(Field::FieldType type)
{    
   switch(type)
  {
    case Field::GRASS:
      return true;
    case Field::WATER:
      return false;
    case Field::STREET:
      return false;
  }
}

1 Ответ

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

Вам нужно добавить default: return true; или return false; в этом контексте

bool Properties::isBuildable(Field::FieldType type)
{    
   switch(type)
  {
    case Field::GRASS:
      return true;
    case Field::WATER:
      return false;
    case Field::STREET:
      return false;
    default:
      return false;

  }
}

Или просто добавьте возврат из области действия переключателя:

bool Properties::isBuildable(Field::FieldType type)
{    
   switch(type)
  {
    case Field::GRASS:
      return true;
    case Field::WATER:
      return false;
    case Field::STREET:
      return false;
  }

  return false;
}

Поскольку, если ваш тип не будет равен одному из значений из регистра, функция не будет возвращать никакого значения, вам нужно исправить это с помощью методов, показанных выше.

...