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如何和枚举元素相匹配呢? 展开
{
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如何和枚举元素相匹配呢? 展开
2个回答
展开全部
sss是CString类型,不是枚举enum类型;而且enum的实际是int类型;需要把CString进行判断,然后再赋值;
if(sss == "C15")
{
STR str = C15;
}
else if(sss == "C20")
{
STR str = C20;
}
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询