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. 参照を作成しない限り、一時的なものを参照として渡すことはできませんconstswitcherCHARtake a に変更するだけconst int&です (そして、そこにいる間はswitcherINTtake a にしますconst char&)。ただし、これは非常に単純な型であり、おそらく値で取得する方がよいでしょう。したがって、 と だけを取るように変更しintますchar

それにもかかわらず、あなたの機能はかなり奇妙です。を実行するだけで、数値と対応する数値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 に答える