2016-06-19 10 views
1

を持っていない私は、コンストラクタを持っています取得エラーC++の呼び出しに該当する機能もすべてのコンストラクタ

オペレータユニット桁の初期化をサポートし、*のオーバーロードのBigIntライブラリを作ってみました「のBigInt(INT R [])」まだ「復帰BigInt(res) "が機能しません。どこの配列がint配列

ありがとうございました。

コンパイラエラー "エラー:" BigInt :: BigInt(BigInt) 'の呼び出しで一致する関数がありません 戻り値BigInt(res); "

ここだがBigInt(const int *r)からBigInt(int r[])コンストラクタのQt Creatorを

#include <iostream> 

using namespace std; 

class BigInt{ 
public: 
    int h[1000]; 

    BigInt(){ 
     for(int i=0; i<1000; i++) h[i] = -1; 
    } 
    BigInt(int n){ 
     for(int i=0; i<1000; i++) h[i] = -1; 
     h[0] = n; 

     //Assuming single digit 
    } 
    BigInt(int r[]){ 
     for(int i=0; i<1000; i++) h[i] = r[i]; 
    } 
    BigInt(BigInt &b){ 
     for(int i=0; i<1000; i++) h[i] = b.h[i]; 
    } 

    BigInt operator*(int n){ 
     int carry = 0; 
     int res[1000] = {-1}; 

     int *a = &h[0]; 
     int *b = &res[0]; 

     while(1){ 

      int unitDigit = n*(*a) + carry; 
      carry = unitDigit/10; 
      unitDigit %= 10; 

      *b = unitDigit; 
      b++; 
      a++; 

      if(*a == -1){ 
       break; 
      } 

     } 

     while(carry){ 
      int unitDigit = carry % 10; 
      *b = unitDigit; 
      carry /= 10; 
      b++; 
     } 

     return BigInt(res); 
    } 

    friend ostream& operator<<(ostream &out, BigInt &b){ 
     int i; 
     for(i = 999; b.h[i] == -1; i--) 
      ; 

     for(; i>=0; i--){ 
      out<<b.h[i]; 
     } 

     return out; 
    } 
}; 

int main(){ 

    int input; 
    cin>>input; 

    BigInt result(1); 

    for(int i=2; i<input; i++){ 
     result = result*i; 
    } 

    cout<<result<<endl; 
    return 0; 
} 
+0

これは私にとってうまくコンパイルされます - あなたは問題があるコードを投稿したことを確信しています。 –

答えて

0

変更ではIAMは、コンパイルコードです。

アレイをコピーしようとしないでください。代わりにそれらを指してください。

+0

'BigInt(int r []) 'を使用しても配列はコピーされません。 –

+0

はい、それは私が "試して"言った理由です。 –

+0

返信ありがとう... const int * works nice – cppxaxa

0

あなたは右のようではありませんコンストラクタ

BigInt(BigInt &b){ 
    for(int i=0; i<1000; i++) h[i] = b.h[i]; 
    } 

を持っています。コピーコンストラクタを提供する場合は、引数はconst&である必要があります。

BigInt(BigInt const&b){ 
    for(int i=0; i<1000; i++) h[i] = b.h[i]; 
    } 

私がこれを変更した後、投稿したコードを使用してプログラムを構築できました。

+0

@JohnBurger、正しくありません。 http://en.cppreference.com/w/cpp/language/copy_constructorおよびhttp://en.cppreference.com/w/cpp/language/move_constructorを参照してください。 –

+0

うわー:いつ変化したのですか?それは私のコードの_lot_を壊してしまった...つまり、変更するのは難しいことではありません。 –

+0

解決してくれてありがとう...私は確かにconstを書いている習慣を作るだろう – cppxaxa

関連する問題