【发布时间】:2019-08-18 20:13:43
【问题描述】:
我正在尝试用 c++ 实现 bigint 类,它还没有完成,我遇到了一些我无法理解的错误。
我已经删除了所有其他功能(因为在这种情况下它们是不必要的) 并且 karatsuba 尚未完成(但在这种情况下应该不会造成问题)。
在乘法函数(重载 * )中,我的编译器给出了一个错误:
将 'const BigInt' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]
一行
ans.a = karatsuba(n,m);
我知道当我尝试更改常量对象或传递给常量函数的对象时会发生这种情况,在我的情况下,我只是创建一个新向量并将其传递给 karatsuba 函数。 从 overloded * 中删除 const 可以消除此错误。
那么,这是否意味着常量函数根本不能改变任何东西? (包括局部变量?)
class BigInt {
typedef long long int ll;
typedef vector<int> vi;
#define p10 1000000000;
#define range 9
vi a;
bool sign;
public:
BigInt operator * (const BigInt &num) const
{
vi n(a.begin(),a.end()),m(num.a.begin(),num.a.end());
BigInt ans;
ans.sign = !(sign ^ num.sign);
while(n.size()<m.size()) n.push_back(0);
while(n.size()>m.size()) m.push_back(0);
ans.a = karatsuba(n,m);
return ans;
}
vi karatsuba(vi a,vi b)
{
int n = a.size();
if(n <= 16)
{
// some code
}
// some code
return a;
}
};
【问题讨论】:
标签: class object compiler-errors constants