首页 > 解决方案 > C++“类枚举”新手问题

问题描述

我开始学习用 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类参数进行分组。这样做我了解到 usingenum classclass. 但是当我切换到enum class我的代码上提示的很多错误时。我已经解决了几乎所有问题,除了这个:

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

错误代码 E0349“没有运算符“<<”与这些操作数匹配”

我四处搜寻,但找不到解决办法。在此先感谢您的时间!(应感谢对我的代码的任何建议或建议)

标签: c++classenums

解决方案


<<没有为类定义运算符,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;
};

推荐阅读