重载>>枚举类型的运算符(工作日)

时间:2018-02-12 13:48:39

标签: c++

我在Xcode中编译我的c ++代码,但它不起作用。我的重载>>运算符函数似乎有问题,我不知道它是什么!?? !!!

我也得到了错误"变量' d'在这里使用时未初始化"。我想从用户那里查看d,这就是为什么我无法理解这个错误。

#include <iostream>
#include <string>

using namespace std;

enum weekday{MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};

weekday operator+(weekday day, int days){
    return weekday((int(day) + days) % 7);
}
//----------------------------------------------------------
ostream &operator<<(ostream &ostrm, weekday day){
    switch(int(day)){
        case MONDAY:
            ostrm << "MONDAY";
            break;
        case TUESDAY:
            ostrm << "TUESDAY";
            break;
        case WEDNESDAY:
            ostrm << "WEDNESDAY";
            break;
        case THURSDAY:
            ostrm << "THURSDAY";
            break;
        case FRIDAY:
            ostrm << "FRIDAY";
            break;
        case SATURDAY:
            ostrm << "SATURDAY";
            break;
        case SUNDAY:
            ostrm << "SUNDAY";
            break;
        default:
            ostrm << "Somewhere inside the depth of time...";
    }
    return ostrm;
}
//------------------------------------------------------------
istream &operator>>(istream &istrm, weekday day){
    switch(int(day)){
        case 0:
            istrm >> MONDAY;
            break;
        case 1:
            istrm >> TUESDAY;
            break;
        case 2:
            istrm >> WEDNESDAY;
            break;
        case 3:
            istrm >> THURSDAY;
            break;
        case 4:
            istrm >> FRIDAY;
            break;
        case 5:
            istrm >> SATURDAY;
            break;
        case 6:
            istrm >> SUNDAY;
            break;
        default:
            cout << "Your input is not valid..." << endl;
    }
    return istrm;
}
//---------------------------------------------
int main(){
    cout << "Enter the day: ";
    weekday d;
    cin >> d;
    d = d + 16;

    cout << d << endl;       
}

1 个答案:

答案 0 :(得分:0)

第二个参数是输出值,您需要分配到它并通过引用传递它:

istream &operator>>(istream &istrm, weekday &day){
    int a;
    istrm >> a;
    switch(a){
        case 0:
            day = MONDAY;
            break;
        case 1:
            day = TUESDAY;
            break;
        case 2:
            day = WEDNESDAY;
            break;
        case 3:
            day = THURSDAY;
            break;
        case 4:
            day = FRIDAY;
            break;
        case 5:
            day = SATURDAY;
            break;
        case 6:
            day =  SUNDAY;
            break;
        default:
            cout << "Your input is not valid..." << endl;
    }
    return istrm;
}
//---------------------------------------------
int main(){
    cout << "Enter the day: ";
    weekday d;
    cin >> d;
    // d = d + 16;

    cout << d << endl;
}