qq_37921588
qq_37921588
采纳率0%
2019-03-01 14:37 阅读 692

求问一下为什么C++中在类的成员函数中使用switch语句对enum类型做分支选择时会提示请输入标识符?

如题↑

#include<iostream>
using namespace std;

class DataType
{
public:
    DataType(int A)
    {
        mode(INT);
        B = A;
    }
    DataType(char A)
    {
        mode(CHAR);
        E = A;
    }
    DataType(float A)
    {
        mode(FLOAT);
        {
            C = A;
        }
    }

    void show();

private:
    enum mode{CHAR,INT,FLOAT};
    union
    {
        char E;
        int B;
        float C;
    };
};

void DataType::show()
{
    switch (mode)//此处报错
    {
    case CHAR:
        cout << "CHAR=" << E << endl;
        break;
    case INT:
        cout << "INT=" << B << endl;
        break;
    case FLOAT:
        cout << "FLOAT=" << C << endl;
        break;
    default:
        break;
    }
}

int main()
{
    int B=90;
    char C = 'X';
    float D=3.1415;
    DataType A(B);
    DataType E(C);
    DataType F(D);

    A.show();
    E.show();
    F.show();

    return 0;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • qq_37195240 qq_37195240 2019-03-01 14:42

    建议多调试一下,此类问题一般是语法错误!

    点赞 评论 复制链接分享
  • sinat_20352547 __抠脚大汉 2019-03-01 14:50

    mode是个类型,需要声明变量。

    点赞 评论 复制链接分享
  • proorck2019 Orc King 2019-03-01 15:18

    好像enum mode是个整体,不能只写mode

    点赞 评论 复制链接分享
  • asdfapuoo 紫云飘羽 2019-03-01 15:54

    enum是枚举,使用的格式应该是mode.CHAR,mode.INT,mode.FLOAT

    点赞 评论 复制链接分享
  • hack_to_hell hack_to_hell 2019-03-02 20:17
    DataType(int A)
    {
        mode(INT);
        B = A;
    }
    DataType(char A)
    {
        mode(CHAR);
        E = A;
    }
    DataType(float A)
    {
        mode(FLOAT);
        {
            C = A;
        }
    }
    
        你看这里面的mode, mode只是你声明的一个枚举类型,它并不是一个具体的对象或者说实例,mode可以说是DataType的内嵌类型,
        但不是DataType的成员,你不能在show()里面对mode进行判断。
        举个不是很恰当但是很容易理解的例子,你可以在DataType里面用int类型,你也可以在DataType构造函数里面写下int(888), 
        但你不能在show里面用switch(int),意思就跟你这个差不多。
    
    点赞 评论 复制链接分享

相关推荐