获取错误C ++没有匹配函数,即使拥有所有构造函数也可以调用

时间:2016-06-19 06:51:30

标签: c++ constructor casting overloading

我试图创建一个支持单位数字初始化和重载*运算符

的BigInt库

我有构造函数" BigInt(int r [])"仍然"返回BigInt(res)"不工作,其中res在int数组

谢谢你的时间。

编译错误"错误:没有匹配函数来调用' BigInt :: BigInt(BigInt)'          返回BigInt(res);"

这里是我在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;
}

2 个答案:

答案 0 :(得分:0)

BigInt(int r[])构造函数更改为BigInt(const int *r)

不要尝试复制数组;而是指向他们。

答案 1 :(得分: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];
  }

在我改变之后,我能够使用您发布的代码构建程序。