2013-02-08 37 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; 
} 
相關問題