CString作为函数的参数传递,如何与函数中的枚举变量的元素匹配呢?

double CBeamWSlab::itest_enum(CString sss)

double b;
enum STR {C15,C20};
double fc[2]={11,22};

STR str=sss;
b=fc[str];
return b;
}
利用ComboBox选择是C15或C20,然后该字符串作为函数的参数,利用枚举变量,为C15,返回11.000000,是C20返回22.000000。编译显示
“error C2440: “初始化”: 无法从“CString”转换为“CBeamWSlab::itest_enum::STR”
1> 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符”
问题出在这一句“ STR str=sss;”,作为字符串的C15或C20如何和枚举元素相匹配呢?

慕码人2483693
浏览 819回答 3
3回答

富国沪深

sss是CString类型,不是枚举enum类型;而且enum的实际是int类型;需要把CString进行判断,然后再赋值;if(sss == "C15"){STR str = C15;}else if(sss == "C20"){STR str = C20;}

慕后森

你需要建立一个表记录各个枚举数据对应的字符串,并与输入字符串逐一比较,第几个字符串就查表得到相应的枚举数据,所以有时还不如就用整型数据来替代枚举数据使用。

陪伴而非守候

如果选项多,可以用switch{case:...} 另外,enum在使用中就是存在这样的问题; 当然你也可以这样定义enum: enum STR{C15=15,C20=20}; 然后再判断输入的sss的时候进行转换成int,然后进行比较; char *ch=sss.GetBuffer(sss.GetLength());  int a = atoi(ch+1); // 把字符串转换成int类型,字符串的第一位“C”去掉; STR str = a; // 把字符串转换出来的int值赋值给enum的对象str
打开App,查看更多内容
随时随地看视频慕课网APP