长期以来一直在努力解决这个问题:
我理解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();
}
答案 0 :(得分:2)
我知道switch-case语句必须作用于常量值
正确
但是通过将语句放在一个类中,我认为我可以更改值(即“常量”),该语句会对该类的两个不同调用进行操作。
没有。 “常量”在这种情况下意味着“编译时常量”,还有许多其他常量。
答案 1 :(得分:0)
只需在构造函数中使用switch语句,但您可以拥有多个构造函数。您可以添加另一个变量来控制哪个&#39;常量&#39;你想要使用的整数。额外的变量是决定调用哪个构造函数。
答案 2 :(得分:0)
你不能初始化&#34;常数&#34;在实例化一个对象时,只是因为它违反了一个常量的定义,它必须在编译时具有一个值。
假设所有其余代码都按照您的意愿工作,您只想在尝试使用常量的地方使用常规变量。