在类中使用switch case语句

时间:2014-07-29 01:33:32

标签: c++ class switch-statement

长期以来一直在努力解决这个问题:

我理解switch-case语句必须作用于常量值,但是通过将语句放在一个类中,我认为我可以更改值(即“常量”),该语句用于两个不同的调用该课程。

在我的班级里面,我已经宣布了我需要的常数,但是没有初始化它们;我只想在实例化类时给它们一个值,所以这个类的两个实例都作用于同一个switch-case语句,但是使用不同的“常量”整数。

这是用c ++解决的吗?

每当我尝试突然'突破'后,我都会得到错误:'案例值不是一个常量表达式',但是如果该方法是一个类的成员,它肯定可以处理在调用中分配的常量?

这是相关代码:

编辑所以现在我想为实例'FirstFourStrings'调用SetValues1,并为switch-case调用此函数设置的值(SetValues1);并为第二个实例'SecondTwoStrings'调用SetValues2并让开关案例使用由此函数设置的值运行**

class IDer{
public:

int ycounter = 0;

void SetValues1(){

    static constexpr int
    Ds = -11,
    D = -10,
    Cs = -9,
    C = -8,
    B = -7,
    As = -6,
    A = -5,
    Gs = -4,
    G = -3,
    Fs = -2,
    F = -1,
    E = 0;
}

void SetValues2() {
    static constexpr int
    Ds = 12,
    D = 13,
    Cs = 14,
    C = 15,
    B = 16,
    As = 17,
    A = 18,
    Gs = 19,
    G = 20,
    Fs = 21,
    F = 22,
    E = 23;
}

void IDmethod () {

    while (y <= ycounter){
    x = 0;
    while (x < Xrange){

        c = 7*y - x;

        switch (c) 
/* this switch-case statement needs to use values from SetValues1() in one instance and those from SetValues2() in the second instance */
        {
            case (Ds): case (Ds + 12): case (Ds + 24): case (Ds - 12): case (Ds - 24):
                Note = "Ds";
                break;

            case (D): case (D + 12): case (D + 24): case (D - 12): case (D - 24):
                Note = "D";
                break;

            case (Cs): case (Cs + 12): case (Cs + 24): case (Cs - 12): case (Cs - 24):
                Note = "Cs";
                break;

            case (C): case (C + 12): case (C + 24): case (C - 12): case (C - 24):
                Note = "C";
                break;

            case (B): case (B + 12): case (B + 24): case (B - 12): case (B - 24):
                Note = "B";
                break;

            case (As): case (As + 12): case (As + 24): case (As - 12): case (As - 24):
                Note = "As";
                break;

            case (A): case (A + 12): case (A + 24): case (A - 12): case (A - 24):
                Note = "A";
                break;

            case (Gs): case (Gs + 12): case (Gs + 24): case (Gs - 12): case (Gs - 24):
                Note = "Gs";
                break;

            case (G): case (G + 12): case (G + 24): case (G - 12): case (G - 24):
                Note = "G";
                break;

            case (Fs): case (Fs + 12): case (Fs + 24): case (Fs - 12): case (Fs - 24):
                Note = "Fs";
                break;

            case (F): case (F + 12): case (F + 24): case (F - 12): case (F - 24):
                Note = "F";
                break;

            case (E): case (E + 12): case (E + 24): case (E - 12): case (E - 24):
                Note = "E";
                break;
            }

        cout << " " << Note << " ";
        Note = "";

        x++;
        }

        cout << endl;
        cout << endl;

        y++;
        }
};

};

string Inputter(){
cout << "Enter chord (e.g. Gmajor, Gminor, Gsharpmajor, Gsharpminor)" << endl;
cin >> Input;
return Input;
}


int main(int argc, const char * argv[])
{
    IDer FirstFourStrings;
    FirstFourStrings.ycounter = 3;
    FirstFourStrings.IDmethod();

    IDer SecondTwoStrings;
    SecondTwoStrings.ycounter = 5;
    SecondTwoStrings.IDmethod();


    Inputter();

}

3 个答案:

答案 0 :(得分:2)

  

我知道switch-case语句必须作用于常量值

正确

  

但是通过将语句放在一个类中,我认为我可以更改值(即“常量”),该语句会对该类的两个不同调用进行操作。

没有。 “常量”在这种情况下意味着“编译时常量”,还有许多其他常量。

答案 1 :(得分:0)

只需在构造函数中使用switch语句,但您可以拥有多个构造函数。您可以添加另一个变量来控制哪个&#39;常量&#39;你想要使用的整数。额外的变量是决定调用哪个构造函数。

答案 2 :(得分:0)

你不能初始化&#34;常数&#34;在实例化一个对象时,只是因为它违反了一个常量的定义,它必须在编译时具有一个值。

假设所有其余代码都按照您的意愿工作,您只想在尝试使用常量的地方使用常规变量。