求问一下为什么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;
}
c++

5个回答

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

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

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

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

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),意思就跟你这个差不多。
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!