我正在处理我在网上找到的用于编写库来处理任意精度数字的资源。
我创建了两个文件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
行无效,因为它不是常量值?
如果我能再向您提供更多信息,请与我们联系!