【发布时间】:2017-12-13 13:45:22
【问题描述】:
以下是我的代码。我正在尝试打印一个枚举数据类型变量,一个直接使用其名称,另一个使用函数返回与原始变量相同的数据类型。
#include <iostream>
using namespace std;
enum days{SUN, MON, TUE, WED, THU, FRI, SAT};
inline days dayaftertomorrow(days d)
{
return static_cast<days>((static_cast<int>(d) + 2) % 7);
}
ostream& operator<< (ostream& out, days& day)
{
switch(day)
{
case SUN: out << "SUN"; break;
case MON: out << "MON"; break;
case TUE: out << "TUE"; break;
case WED: out << "WED"; break;
case THU: out << "THU"; break;
case FRI: out << "FRI"; break;
case SAT: out << "SAT"; break;
}
return out;
}
int main(int argc, char const *argv[]) {
days d = MON, e;
e = dayaftertomorrow(d);
cout << d << "\t" << e << endl;
cout << d << "\t" << dayaftertomorrow(d) << endl;
return 0;
}
我希望结果为
MON WED
MON WED
但我得到了
MON WED
MON 3
我该如何解决这个问题?
【问题讨论】:
-
使用
enum class days代替enum days:使用enum class禁止隐式转换为整数类型。这样你会得到一个错误,而不是编译器绕过你的重载运算符,因为它与临时对象不匹配(你需要将days const&作为参数而不是days&:后者只绑定到 [可修改] 左值。
标签: c++ oop enums operator-overloading