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

时间:2013-02-08 10:49:22

标签: c++

让我想象一下我有功能:

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” 我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您作为switcherCHAR的参数提供的表达式为您提供了临时int。您不能传递临时作为参考 - 除非您参考const。只需更改switcherCHAR即可获得const int&(当您使用switcherINT时,请const char&获取int。然而,这是非常简单的类型,你可能最好只是按价值取得它们。因此,将其更改为仅charx

尽管如此,你的功能很奇怪。通过执行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;
}