C ++ "Class Enum" Проблемы для начинающих - PullRequest
0 голосов
/ 07 мая 2020

Я начинаю учиться программировать на C ++ (из VB. net), и мне нужна помощь в использовании enum class.

Я сделал этот простой код из упражнения по обучению ( Первоначально разделен на header.h и Exercise. cpp, но я собрал все вместе здесь):

#include <iostream>
#include <string>

#define BEGIN_WITH(x) { \
        auto &_ = x;
#define END_WITH() }

using namespace std;

enum class Gender { Male, Female };

struct PersonStruct {
    string _Name;
    string _SurName;
    int _Age;
    double _Heigth;
    Gender _Gender; };

class Person { public:
    string _Name{};
    string _SurName{};
    int _Age{};
    double _Heigth{};
    Gender _Gender{}; };


int ModifyPerson(Person& PassPersona, PersonStruct Attribute) {
    PassPersona._Name = Attribute._Name;
    PassPersona._SurName = Attribute._SurName;
    PassPersona._Heigth = Attribute._Heigth;
    PassPersona._Age = Attribute._Age;
    PassPersona._Gender = Attribute._Gender;

    return(0); }

int main() {    Person TestingPerson;

    BEGIN_WITH(TestingPerson)
    _._Age = 23;
    _._Gender = Gender::Male;
    _._Heigth = 1.94;
    _._Name = "John";
    _._SurName = "Smith";
    END_WITH()

    cout << "Person attributes: " << endl;
    cout << "Name: " << TestingPerson._Name << endl;
    cout << "Surname: " << TestingPerson._SurName << endl;
    cout << "Age: " << TestingPerson._Age << endl;
    cout << "Gender: " << TestingPerson._Gender << endl;
    cout << "Heigth: " << TestingPerson._Heigth << endl;
    cout << endl;

    ModifyPerson(TestingPerson, PersonStruct{ "Poca","Hontas",24,1.85,Gender::Female });

    cout << "New Person attributes: " << endl;
    cout << "Name: " << TestingPerson._Name << endl;
    cout << "Surname: " << TestingPerson._SurName << endl;
    cout << "Age: " << TestingPerson._Age << endl;
    cout << "Gender: " << TestingPerson._Gender << endl;
    cout << "Heigth: " << TestingPerson._Heigth << endl;

    return(0); }

Я создал структуру, чтобы сгруппировать все параметры класса Person. Делая это, я узнал, что использование enum class более безопасно, чем class. Но когда я переключился на enum class, в моем коде появилось много ошибок. Я решил почти все из них, кроме этого:

cout << "Gender: " << TestingPerson._Gender << endl;

Код ошибки E0349 «Нет оператора« << »соответствует этим операндам» </p>

Я искал, но я не нашел решения этого. Спасибо заранее за ваше время! (любые предложения или рекомендации по моему коду должны быть оценены)

1 Ответ

2 голосов
/ 07 мая 2020
Оператор

<< не определен для класса Gender, потому что это ваш собственный класс. Вам нужно будет его перегрузить. Подробнее здесь.

enum class Gender
{
  male,
  female
};

ostream& operator<< (ostream & os, const Gender & g)
{
  switch(g)
  {
      case Gender::male: os << "Male"; return os;
      case Gender::female: os << "Female"; return os;
  }
  return os;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...