在枚举中转换运算符

时间:2009-12-04 09:32:12

标签: c++

我写了这样的课:

#pragma once
#include "stdafx.h"

struct Date
{
private:
int day;
int year;
enum Month {jan = 1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};
Month* month;
enum date_state 
{
    good,err_flag, bad_day, bad_month, bad_year,
};
//I would like to define converting operator from enum to char
Date::date_state::operator char()
{
    return err_flag;
}
date_state err_state;
void clear(date_state state = good);
date_state rdstate() const;
void check_day(const int d)const;
void check_month()const;
void check_year()const;
public:
Date(const int d,const Date::Month& m, const int y);

};

基本上它不起作用。

2 个答案:

答案 0 :(得分:1)

枚举不是类/结构,因此您无法为其定义转换运算符。

我建议编写一个全局范围(在命名空间内)函数来进行正确的转换。

有些事情:

char convert (Month m) {
  switch (m) {
    case (jan): return 'j';
    case (feb): return 'f';
    default:    return 'x';
  }
}

答案 1 :(得分:0)

您无法为enum date_state声明成员函数,因为它是枚举,但您可以class Date执行此操作:

class Date {
...
    enum date_state 
    {
        good, bad_day, bad_month, bad_year,
    } err_flag;

    operator char() {
        return err_flag;
    }
}

但我宁愿建议使用普通的成员函数,因为转换操作符很容易被意外使用。