澄清设置为全零的变量就是断开的情况。注释中包含值的枚举工作正常。
这是我的代码的简化,问题是接收"枚举错误"。所以我的问题是什么时候才能评估枚举?另外,最好我可以枚举枚举基本上是整数,因此枚举变量为0应该评估为假,并且当我将它们全部归零时永远不会到达抛出。
enum var_types//Set all to 0 to disable
{
VAR1 = 0x0, //var1 = 0x1
VAR2 = 0x0, //var2 = 0x2
VAR3 = 0x0, //var3 = 0x3
VAR4 = 0x0, //var4 = 0x4
VAR_NONE =0x0 //disabled = 0x0
};
func(int var){
if(var){
if(var==VAR1){ cout << VAR1 << endl;}
else if(var==VAR2){ cout << VAR2 << endl;}
else if(var==VAR3){ cout << VAR3 << endl;}
else if(var==VAR4){ cout << VAR4 << endl;}
else {throw job_error("enum error");}
}
//doing other things...
}
func(VAR1);
func(VAR2);
func(VAR3);
func(VAR4);
func(VAR_NONE);
代码的动机是快速禁用多次评估&#34; if&#34;声明在代码顶部的单个位置调用函数,同时还允许单独禁用它们。大约有15个电话给&#34; func&#34;代码分散在1200多行代码中。枚举的归零是从一个地方禁用所有内容的便捷方式。
答案 0 :(得分:1)
&#39; VAR1..VAR4&#39;的值在编译时被定义,并且实际上允许它们全部归零&#34;,使得None
全部评估为&#34; true&#34;。问题可能出在您的代码中,在每个int var=0; var==VAR1; var==VAR2; ...
之后您有;
,这样(一旦您因错位if
而纠正编译错误),您可能会输入所有{{1} }} - 语句。
因此,对于以下改编的代码,没有一个调用产生&#34;枚举错误&#34;:
else
但请注意,您通常也会使用if
- 类型作为参数类型。这将保护您在编译时使用&#34;未定义的枚举值&#34;:
void func(int var){
if(var){
if(var==VAR1){}
else if(var==VAR2){}
else if(var==VAR3){}
else if(var==VAR4){}
else {cout << "enum error";}
}
//doing other things...
}
int main() {
func(VAR2);
func(VAR3);
func(VAR4);
}
答案 1 :(得分:0)
所有枚举条目都明确赋值为0x0,因此它们无法区分(并且全部为零)。
您的评论表明您打算让他们拥有不同的价值 - 如果您没有为他们指定明确的价值,他们会这样做。
所以,如果你只是删除了显式的值赋值,你应该得到你想要的。
但我真正想知道的是;您试图在这里解决的实际问题是什么?