C++ c++;枚举并使用它们从用户输入

C++ c++;枚举并使用它们从用户输入,c++,input,enums,C++,Input,Enums,我的代码中有一个枚举,如下所示:enum Status{in Active,Active}。 状态对象作为参数传递给Person对象,因此我希望用户输入Active或In Active并将其保存在状态变量中。我该怎么做?我一开始试过,但没用 这是我的密码: #include <iostream> using namespace std; enum Status {InActive, Active}; class Person { private: str

我的代码中有一个枚举,如下所示:
enum Status{in Active,Active}。
状态对象作为参数传递给
Person
对象,因此我希望用户输入Active或In Active并将其保存在状态变量中。我该怎么做?我一开始试过,但没用

这是我的密码:

#include <iostream>

using namespace std;

enum Status {InActive, Active};

class Person {
    private:
        string name;
        int age;
        Status status;

    public:
        Person (const string &_name, const int _age, const Status _status) : name(_name), age(_age), status(_status) {}

        string &getName () { return name; }
        int getAge () { return age; }
        Status getStatus () { return status; }

        void setName (const string &_name) { name = _name; }
        void setAge (const int _age) { age = _age; }
        void setStatus (const Status _status) { status = _status; }
};

////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// Main Method //////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

int main () {
    string name;
    int age;
    Status status;

    cout << "Enter a name: "; getline(cin, name);
    cout << "Enter age: "; cin >> age;
    cout << "Enter status: "; cin >> status;

    Person p(name, age, status);

    return 0;
}
#包括
使用名称空间std;
枚举状态{不活动,活动};
班主任{
私人:
字符串名;
智力年龄;
地位;
公众:
Person(const string&_name,const int年龄,const Status状态):name(_name),age(_age),Status(_Status){
string&getName(){return name;}
int getAge(){return age;}
Status getStatus(){return Status;}
void setName(const string&_name){name=_name;}
无效设置(const int_age){age=_age;}
void setStatus(const Status _Status){Status=_Status;}
};
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////主要方法//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
int main(){
字符串名;
智力年龄;
地位;
年龄;
状态;
p人(姓名、年龄、身份);
返回0;
}
这是我得到的错误(这是构建日志):

编译:C:\Users\KiKo SaMa\Desktop\C++\Person.cpp
C:\Users\KiKo SaMa\Desktop\C++\Person.cpp:在函数“int main()”中:
C:\Users\KiKo SaMa\Desktop\C++\Person.cpp:36:38:错误:与“std::cin>>状态”中的“operator>>”不匹配
C:\Users\KiKo SaMa\Desktop\C++\Person.cpp:36:38:注:候选人包括:
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:122:7:注:std::basic\u istream:::\u istream类型和std::basic\u istream::operator>(std::basic\u istream::\u istream类型和(*)(std::basic\u istream::::\u istream类型和)[带字符,\u traituds=char::char\u traituds,std::basic\u istream:\istream=basic\istream类型]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:122:7:注意:参数1从'Status'到'std::basic\u istream::。\uu istream\u type&(*)(std::basic\u istream::\uu istream类型&){aka std::basic\u istream&(*)(std::basic\u istream&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:126:7:注:std::basic\u istream::::\u istream类型&std::basic\u istream::operator>(std::basic\u istream::\u ios类型(*)(std::basic\u istream:&:\u ios类型&)[with(u CharT=char,_Traits=std::char\u Traits,std::basic\u istream:::(uu istream\u type=std::basic\u istream,std::basic\u istream::(uu ios\u type=std::basic\u ios]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:126:7:注意:参数1从“Status”到“std::basic\u istream:::_ios\u type&(*)(std::basic\u istream::_ios\u type&){aka std::basic\u ios&(*)(std::basic\u ios&)}
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:133:7:注:std::basic\u istream::::\u istream类型和std::basic\u istream::operator>(std::ios\u base&(*)(std::ios\u base&)[带字符,\u traitracts=std::char\u traitracts,std::basic\u istream::\u type=std::basic\u istream:]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:133:7:注意:参数1从“Status”到“std::ios_base&(*)(std::ios_base&)”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:169:7:注:std::basic\u istream::::\uu istream\u type&std::basic\u istream::operator>(bool&)[带CharT=char,\u Traits=std::char\u Traits,std::basic\u istream::::\uu istream\u type=std::basic\u istream]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:169:7:注意:参数1从“Status”到“bool&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:173:7:注意:std::basic\u istream&std::basic\u istream::operator>>(短int&)[带_CharT=char,_Traits=std::char\u Traits]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:173:7:注意:参数1从“Status”到“short int&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:176:7:注:std::basic\u istream::::\uu istream\u type&std::basic\u istream::operator>(短的无符号int&)[带CharT=char CharT,\u Traits=std::char\u Traits,std::basic\u istream:::\uu istream\u type=std::basic\u istream]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:176:7:注意:参数1从“Status”到“short unsigned int&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:180:7:注意:std::basic\u istream&std::basic\u istream::operator>>(int&)[带(CharT=char,_Traits=std::char\u Traits]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:180:7:注意:参数1从“Status”到“int&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:183:7:注:std::basic\u istream::::\u istream\u type&std::basic\u istream::operator>(unsigned int&)[带_CharT=char,\u Traits=std::char\u Traits,std::basic\u istream:::\u istream=std::basic\u istream]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:183:7:注意:参数1从“Status”到“unsigned int&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:187:7:注:std::basic\u istream::::\uu istream\u type&std::basic\u istream::operator>(long int&)[带CharT=char,\u Traits=std::char\u Traits,std::basic\u istream:::\uu istream\u type=std::basic\u istream]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:187:7:注意:参数1从“Status”到“long int&”的转换未知
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:191:7:注:std::basic\u istream::::\uu istream\u type&std::basic\u istream::operator>(长无符号int&)[带CharT=char Traits=std::char Traits,std::basic\u istream:::\uu istream\u type=std::basic\u istream]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:191:7:注意:参数1从“Status”到“long unsi”的转换未知
Compiling: C:\Users\KiKo-SaMa\Desktop\C++\Person.cpp
C:\Users\KiKo-SaMa\Desktop\C++\Person.cpp: In function 'int main()':
C:\Users\KiKo-SaMa\Desktop\C++\Person.cpp:36:38: error: no match for 'operator>>' in 'std::cin >> status'
C:\Users\KiKo-SaMa\Desktop\C++\Person.cpp:36:38: note: candidates are:
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:122:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:122:7: note:   no known conversion for argument 1 from 'Status' to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:126:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>, std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:126:7: note:   no known conversion for argument 1 from 'Status' to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:133:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:133:7: note:   no known conversion for argument 1 from 'Status' to 'std::ios_base& (*)(std::ios_base&)'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:169:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:169:7: note:   no known conversion for argument 1 from 'Status' to 'bool&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:173:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char, _Traits = std::char_traits<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:173:7: note:   no known conversion for argument 1 from 'Status' to 'short int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:176:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:176:7: note:   no known conversion for argument 1 from 'Status' to 'short unsigned int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:180:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char, _Traits = std::char_traits<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:180:7: note:   no known conversion for argument 1 from 'Status' to 'int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:183:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:183:7: note:   no known conversion for argument 1 from 'Status' to 'unsigned int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:187:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:187:7: note:   no known conversion for argument 1 from 'Status' to 'long int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:191:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:191:7: note:   no known conversion for argument 1 from 'Status' to 'long unsigned int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:196:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:196:7: note:   no known conversion for argument 1 from 'Status' to 'long long int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:200:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:200:7: note:   no known conversion for argument 1 from 'Status' to 'long long unsigned int&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:205:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:205:7: note:   no known conversion for argument 1 from 'Status' to 'float&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:209:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:209:7: note:   no known conversion for argument 1 from 'Status' to 'double&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:213:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:213:7: note:   no known conversion for argument 1 from 'Status' to 'long double&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:217:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:217:7: note:   no known conversion for argument 1 from 'Status' to 'void*&'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:241:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:241:7: note:   no known conversion for argument 1 from 'Status' to 'std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}'
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_string.tcc:998:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/istream.tcc:957:5: note: template<class _CharT2, class _Traits2> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT2*)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/istream.tcc:925:5: note: template<class _CharT, class _Traits> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT&)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:709:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char&)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:714:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char&)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:756:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char*)
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/istream:761:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char*)
Process terminated with status 1 (0 minutes, 0 seconds)
43 errors, 0 warnings
std::map<std::string,Status> m;
m["In-Active"] = In-Active;
m["Active"] = Active;

std::string sstatus;
cin >> sstatus;
Status status = m[sstatus];
#include <iostream>

template<typename def>
class safe_enum : public def
{
public:
  int val;
  safe_enum(int v) : val(v) {}
//  inner underlying() const { return val; }
  bool operator == (const safe_enum & s) const { return this->val == s.val; }
  bool operator != (const safe_enum & s) const { return this->val != s.val; }
  bool operator <  (const safe_enum & s) const { return this->val <  s.val; }
  bool operator <= (const safe_enum & s) const { return this->val <= s.val; }
  bool operator >  (const safe_enum & s) const { return this->val >  s.val; }
  bool operator >= (const safe_enum & s) const { return this->val >= s.val; }
};

struct status_def {
  enum type { NoValue, InActive, Active };
};
typedef safe_enum<status_def> Status;

std::istream& operator>>(std::istream& Istr, Status& other)
{
    std::cout << "Enter Status value: " << std::endl; 
    //here the logic to handle input error
    Istr >> other.val;
    return Istr;
}

std::ostream& operator<<(std::ostream& os,const Status& toPrint)
{
    if (toPrint.val == Status::Active)
        return os << "Active";
    if (toPrint.val == Status::NoValue)
        return os << "NoValue";
    if (toPrint.val == Status::InActive)
        return os << "InActive";
    throw;
}

int main(void)
{
    Status test(Status::NoValue);
    std::cout << test << std::endl;
    std::cin >> test;
    std::cout << test << std::endl;
}