让我想象一下我有功能:
int switcherINT(char &c){
switch (c){
case '1': return 1; break;
case '2': return 2; break;
case '3': return 3; break;
case '4': return 4; break;
case '5': return 5; break;
case '6': return 6; break;
case '7': return 7; break;
case '8': return 8; break;
case '9': return 9; break;
case '0': return 0; break;
default: return err;
}
}
char switcherCHAR(int &c){
switch (c){
case 1: return '1'; break;
case 2: return '2'; break;
case 3: return '3'; break;
case 4: return '4'; break;
case 5: return '5'; break;
case 6: return '6'; break;
case 7: return '7'; break;
case 8: return '8'; break;
case 9: return '9'; break;
case 0: return '0'; break;
default: return errCH;
}
}
我正在尝试计算嵌套表达式:
c.str[i] = switcherCHAR(switcherINT(pthis->str[pthis->size-i-1])-switcherINT(pb->str[pb->size-i-1])-loc);
其中
longMath *pthis(this),*pb(&b);
longMath c;
class longMath{
protected:
char* str;
int size;
protected:
........
编译器说: “无法将参数1从int转换为& int” 我可以解决这个问题吗?
答案 0 :(得分:4)
您作为switcherCHAR
的参数提供的表达式为您提供了临时int
。您不能传递临时作为参考 - 除非您参考const
。只需更改switcherCHAR
即可获得const int&
(当您使用switcherINT
时,请const char&
获取int
。然而,这是非常简单的类型,你可能最好只是按价值取得它们。因此,将其更改为仅char
和x
。
尽管如此,你的功能很奇怪。通过执行char
,可以非常轻松地在'0' + x
和'0'
对应的数字之间进行转换。数字字符保证按连续顺序排列。因此,如果您使用5
的值并添加(例如'5'
),您将获得字符{{1}}的值。
答案 1 :(得分:0)
使用这样的函数会好得多:
int switcherINT(const char &c) {
return (c >= '0' && c <= '9') ? c - '0' : err;
}
char switcherCHAR(const int &c) {
return (c >= 0 && c <= 9) ? '0' + c : errCH;
}