2016-10-24 13 views
2

ので、私は私がしたこれ、小数に2進数、8進数または16進数に変換C++プログラムを書くためにこの割り当てを持っていて、ここに私のコードは次のとおりです。今2進、8進、10進プログラムへの進

#include <iostream> 
#include <string> 
#include <cmath> 
using namespace std; 

long two2ten(string s) 
{ 
    int m = 0; 
    for (size_t i = 0; i < s.size(); i++) 
    { 
     m = 2 * m + (s[i] - '0'); 
    } 
    return m; 
} 

long oct2dec(int n) 
{ 
    long int m = 0, i = 0; 
    while (n != 0) 
    { 
     m = m + (n % 10)* pow(8, i++); 
     n = n/10; 
    } 
    return m; 
} 
long hex2dec(string s) 
{ 
    long result = 0; 

    for (size_t i = 0; i < s.length(); i++) 
    { 
     if (s[i] >= 48 && s[i] <= 57) 
     { 
      result += (s[i] - 48)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 65 && s[i] <= 70) { 
      result += (s[i] - 55)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 97 && s[i] <= 102) { 
      result += (s[i] - 87)*pow(16, s.length() - i - 1); 
     } 
    } 
    return result; 
} 

int main() 
{ 
    int k, n; 
    string s; 
    while (cin >> k) 
    { 
     if (k == 2) 
     { 
      cin >> s; 
      cout << two2ten(s) << endl; 
     } 
     else if (k == 8) 
     { 
      cin >> n; 
      cout << oct2dec(n) << endl; 
     } 
     else if (k == 16) 
     { 
      cin >> s; 
      cout << hex2dec(s) << endl; 
     } 
     else 
     { 
      cin >> n; 
     } 
    } 
    return 0; 
} 

、しかし、それは私の先生にコンパイルエラーを与える(そして、なぜ彼は言うのでもない)。私は数日のうちに壁に頭を打っていましたが、何が間違っているかはまだ分かりません。誰かが私にそれを助けてくれますか?

+4

でコードをコンパイルし、問題を自分で確認してください。どのようにコンパイルしますか?おそらく、あなたが珍しいオプションを使用するかどうかを提案することができます。 – BoBTFish

+1

コンパイラと彼が使っているOSを聞いてもいいですか? –

+2

コンパイラ/オプションは何ですか?あなたの先生は何ですか? – wasthishelpful

答えて

3

これらのpow()関数を呼び出すときに、暗黙の変換が2番目のパラメータ(size_tからdouble)に起こったという問題があります。 static_castを追加すると役立ちます。

ことはほとんど公正だ、なぜ、彼は言っていない場合は

-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion