0

让我们想象一下我有功能:

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

4

2 回答 2

4

您作为参数switcherCHAR给出的表达式为您提供了一个临时的int. 您不能将临时作为参考传递 - 除非您进行参考const。只需更改switcherCHAR为 take a const int&(当你在它的时候, make switcherINTtake a const char&)。但是,这是非常简单的类型,您最好只按值获取它们。因此,将它们更改为仅取intchar

尽管如此,你的功能很奇怪。只需执行.就可以很容易地在数字x和对应数字之间转换 保证数字字符是连续的。因此,如果您取 的值并添加,比如说,,您将获得字符的值。char'0' + x'0'5'5'

于 2013-02-08T10:52:15.060 回答
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;
}
于 2013-02-08T11:50:06.333 回答