gpt4 book ai didi

class - 错误: passing 'const xxx' as 'this' argument discards qualifiers

转载 作者:行者123 更新时间:2023-12-02 10:57:36 26 4
gpt4 key购买 nike

我正在尝试在C++中实现bigint类,但尚未完成,我遇到了一些我无法理解的错误。

我已经删除了所有其他功能(因为在这种情况下它们是不必要的)
karatsuba尚未完成(但在这种情况下应该不会造成问题)。

在乘法函数(重载*)中,我的编译器给出了一个错误:

passing 'const BigInt' as 'this' argument discards qualifiers [-fpermissive]



在线
 ans.a = karatsuba(n,m);

我了解,当我尝试更改常量对象或传递给常量函数的对象时,会发生这种情况,就我而言,我只是创建一个新 vector 并将其传递给karatsuba函数。
从重叠的*中删除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;
}
};

最佳答案

好的,所以在进一步搜索之后,我意识到此指针隐式传递给oveloaded *,然后传递给karatsuba(因为它是该类的成员函数),并且由于karatsuba不是常量函数,因此无法保证不会更改对象内容,因此会触发此错误。
一种解决方案是将karatsuba声明为静态,因为静态成员函数不接收此指针(甚至可以使用::运算符直接使用类对象来调用它们),请从这里Static data members and member functions.了解更多信息

所有需要更改的是:

static vi karatsuba(vi a,vi b)
{
int n = a.size();
if(n <= 16)
{
// some code
}
// some code
return a;
}

关于class - 错误: passing 'const xxx' as 'this' argument discards qualifiers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57548048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com