从重载函数

时间:2016-02-22 00:28:36

标签: c++ operator-overloading overloading arbitrary-precision

我正在处理我在网上找到的用于编写库来处理任意精度数字的资源。

我创建了两个文件BigInt.h,包含所有函数的定义,以及BigInt.cpp,包含函数的所有实现。

程序的一部分涉及重载操作符以从其他函数返回调用。为了这个问题,我将发布代码,因为它来自示例,即使我不完全理解它的工作原理。

我在这里定义了运算符重载:

BigInt BigInt::operator / (const BigInt &v) const {
    return divmod(*this, v).first;
}

这依赖于它上面立即执行的函数divmod。实施如下:

friend pair<BigInt, BigInt> BigInt::divmod(const BigInt &a1, const BigInt &b1) {
    ... Do Things

    return make_pair(q, r / norm);
}

我在return语句之前遗漏了代码。

我是用VC ++ 15写的。当我将鼠标悬停在return divmod(...).first;产生的错误上时,Intellisense说:

Error: more than once instance of overloaded function "divmod" matches the argument list:
    function "divmod(const BigInt &a1, const BigInt &b1)"
    function "divmod(const BigInt &a1, const BigInt &b1)"
    argument types are: (const BigInt &a1, const BigInt &b1)

*this通过构造函数设置:

BigInt::BigInt(long long v) {
    *this = v;
}

您可以提供的任何帮助都会有所帮助。如有必要,我可以提供更多信息。

为了便于获取信息,原始程序是用C语言编写的,并且在结构中而不是像我所做的那样用C ++类实现。

[编辑]

我被告知我使用函数divmod作为朋友和BigInt类的成员。为了解决这个问题,我取消了friend分类器,只是将其作为public pair<>函数。以下是与此示例相关的代码

#includes and namespaces
class BigInt {
    # Private Members

public:
    BigInt(long long v){
        *this = v
    }

    pair<BigInt, BigInt> BigInt::divmod(const BigInt &a1, const BigInt &b1) {
        ... Do things

        return make_pair(q, r / norm);
    }

    BigInt BigInt::operator / (const BigInt &v) const {
        return divmod(*this, v).first;
    }
};

在这样做时,Intellisense给了我一个新的错误。

the object has type qualifiers that are not compatible with the member function "BigInt::divmod"
object type is: const BigInt

值得注意的是,我没有对代码进行“复制”,而且我还缺少了几个函数(主要是运算符重载)。这就是为什么此时我使用的是Intellisense错误而不是编译器错误(即使它们只是Intellisense提供的错误的较短版本)。

在错误中它提到我提供给函数提供的限定符是无效的(并且不告诉我它正在寻址哪个参数)。这是否意味着构造函数中的*this = v行无效,因为它不是常量值?

如果我能再向您提供更多信息,请与我们联系!

0 个答案:

没有答案