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

doubleCBeamWSlab::itest_enum(CStringsss){doubleb;enumSTR{C15,C20};doublefc[2]={11,22}... 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如何和枚举元素相匹配呢?
展开
 我来答
百度网友22cf2ff28
2013-01-22 · TA获得超过625个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:191万
展开全部
sss是CString类型,不是枚举enum类型;而且enum的实际是int类型;需要把CString进行判断,然后再赋值;
if(sss == "C15")
{
STR str = C15;

}
else if(sss == "C20")
{
STR str = C20;

}
追问
如何选项多的话,这样就很花时间!如果有C15-C80的话,代码就太多了。我是问直接的方法!
追答
如果选项多,可以用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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-02-04 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3774万
展开全部
你需要建立一个表记录各个枚举数据对应的字符串,并与输入字符串逐一比较,第几个字符串就查表得到相应的枚举数据,所以有时还不如就用整型数据来替代枚举数据使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式