用enum型的数据类型作为函数的返回值类型的时候,为什么必须把enum的定义在类的定义之外?
注;定义在类内部的时候编译出错。

解决方案 »

  1.   

    class A 
    {
    public:
    enum color{red =1 ,blue =2};
    enum color GetAcolor()
    {
    return red;
    }
    };
    void CDlg16Dlg::OnButton4() 
    {
    A a;
    A::color clr;
    clr = a.GetAcolor();
    // ShellExecute(NULL, "open" ,"IEXPLORE.EXE"  , "f:\\temp\\test", NULL, SW_SHOWNORMAL);
    }
      

  2.   

    您给出的是内联函数的写法吧,若是普通的类成员函数比如我如下的写法没法通过编译
    XXDoc.h
    ...
    enum TRAFFIC_RULE{MEETING, RIGHT_CROSSING = 2, LEFT_CROSSING = 3, OVERTAKING = 4}; typedef struct STATE_MEMOtag
    {
    int collisiontimes;
    vector<int> shipNo;
    vector<TRAFFIC_RULE> trule;
    }STATE_MEMO; STATE_MEMO m_smState[TMAX];private:
    TRAFFIC_RULE _TrafficeRule(FPOINT po, FPOINT pt);
    ...XXDoc.cpp
    TRAFFIC_RULE CMultiModeDoc::_TrafficeRule(FPOINT po, FPOINT pt)
    {
    TRAFFIC_RULE TRULE;
    float x, y;
    double A, a; x = pt.x - po.x;
    y = pt.y - po.y; if ( fabs(x) < 0.0001 && fabs(y) < 0.0001)
    {
    AfxMessageBox("ERR!");
    }
    else if ( fabs(x) < 0.0001)
    {
    if (y > 0) A = 0;
    else A = 180 * rad;
    }
    else TRULE = OVERTAKING; return TRULE;
    }void CMultiModeDoc::NavigationModel(int ntime)
    { TRAFFIC_RULE tstate;..............
    tstate = _TrafficeRule(m_sp[i].pn, m_sp[j].pn);
    m_smState[i].trule.push_back(tstate);
    ..............
    }
      

  3.   

    #include <iostream.h>
    class A 
    {
    public:
    enum color{red =1 ,blue =2};
    enum color GetAcolor();
    /* {
    return red;
    }*/
    };enum A::color A::GetAcolor()
    {
    return red;
    }
    void main(void)
    {
    A a;
    A::color clr;
    clr = a.GetAcolor();
    cout<<clr<<endl;
    }
      

  4.   

    不知道是不是运行环境的原因,我下面的程序和你给出的例子应该是一样的吧,可是通不过编译:
    XXDoc.h
    ...
    public:
    enum TRAFFIC_RULE{MEETING, RIGHT_CROSSING = 2, LEFT_CROSSING = 3, OVERTAKING = 4};private:
    TRAFFIC_RULE _TrafficeRule(FPOINT po, FPOINT pt);
    ...XXDoc.cpp
    TRAFFIC_RULE CMultiModeDoc::_TrafficeRule(FPOINT po, FPOINT pt)
    {
    TRAFFIC_RULE TRULE;
    float x, y;
    double A, a; x = pt.x - po.x;
    y = pt.y - po.y; if ( fabs(x) < 0.0001 && fabs(y) < 0.0001)
    {
    AfxMessageBox("ERR!");
    }
    else TRULE = OVERTAKING; return TRULE;
    }
      

  5.   

    XXDoc.cpp
    TRAFFIC_RULE CMultiModeDoc::_TrafficeRule(FPOINT po, FPOINT pt)//这行改为
    CMultiModeDoc::TRAFFIC_RULE CMultiModeDoc::_TrafficeRule(FPOINT po, FPOINT pt)试试 enmu既然是在类里定义的 就要指明所在域啊
      

  6.   

    enum A::color A::GetAcolor()
    注意我上面的类域,OK,你那个没有的,参照sigma1123(未知的界限) ( ) 信誉:100  2004-8-20 21:50:37  得分: 0  
    的说法,