无法将参数 1 从 int 转换为 &int

can not convert parameter 1 from int into &int

本文关键字:int 转换 参数      更新时间:2023-10-16

让我们想象一下我有几个函数:

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"Haw我能解决这个问题吗?

作为switcherCHAR的参数给出的表达式将为您提供一个临时int。除非将引用设为const,否则不能将临时作为引用传递。只需将switcherCHAR更改为const int&(当您使用它时,使switcherINT转换为const char&)。然而,这是非常简单的类型,你最好只按价值来取它们。所以把它们改为只取intchar

尽管如此,你的功能还是很奇怪。只需执行'0' + x,就可以很容易地在数字x和对应的char之间进行转换。数字字符保证按连续顺序排列。因此,如果你取'0'的值,加上5,你就会得到字符'5'的值。

最好使用以下函数:

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;
}