2013-02-08 38 views
0

让我们来想象我有功能:不能从int转换参数1和诠释

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

通过不通过引用传递,或传递一个'const'参考。您不能将临时绑定到非const引用。 –

+0

你的意思是这个char switcherCHAR(const int&c)? 错误仍然可以确认 –

+0

即使我使用'switcherCHAR(int i)',这应该可行。 –

回答

4

您给出的作为参数switcherCHAR的表达式给了您一个临时的int。您不能通过临时作为参考 - 除非您参考const。只需更改switcherCHAR即可获得const int&(同时您可以使switcherINTconst char&)。然而,这是非常简单的类型,你可能更愿意按价值获取它们。所以改变他们只需要intchar

尽管如此,你的功能很奇怪。通过执行'0' + x,在xchar之间进行转换非常容易。数字字符保证连续。因此,如果您采用'0'的值并添加(比如说,5),您将获得字符'5'的值。

+0

我已经改变INT switcherINT(为const char &c); 布尔切换器(为const char &c); 但错误依然存在 - “不能从int转换参数1和INT” ... \ –

+0

@AntonKizema你已经改变了他们两个采取' const char&'?那么你如何得到关于'int&'? –

+0

或只是'int'的错误可能会更快 –

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; 
} 
相关问题