C++ 将两个表示为链表的大数字相乘

C++ 将两个表示为链表的大数字相乘,c++,list,overloading,operator-keyword,C++,List,Overloading,Operator Keyword,我尝试将两个表示为链接LILST的大数字相乘(重载运算符*),但似乎出现了错误。你们谁能帮帮我吗?我认为乘法函数是正确的,因为我已经测试过了。 但当我试图让操作员超负荷工作时,我似乎无法找出问题所在*。。。。。 我试着在一个列表中循环,并从另一个列表中对每个节点进行多重访问。。2个大数字除法的额外提示?非常感谢。这是我的密码: Numar *Numar :: operator* (Numar *nr2) //overloading operator* { Lista *L = new Lista

我尝试将两个表示为链接LILST的大数字相乘(重载运算符*),但似乎出现了错误。你们谁能帮帮我吗?我认为乘法函数是正确的,因为我已经测试过了。 但当我试图让操作员超负荷工作时,我似乎无法找出问题所在*。。。。。 我试着在一个列表中循环,并从另一个列表中对每个节点进行多重访问。。2个大数字除法的额外提示?非常感谢。这是我的密码:

Numar *Numar :: operator* (Numar *nr2) //overloading operator*
{
Lista *L = new Lista;
Numar *rezultat = new Numar(L);//links the list to the number 
Lista *aux = new Lista;
Numar *rez2 = new Numar(aux); //an auxiliary 
int t = 1;
Nod *p2 = this->L->prim; //1st node of this
while (p2) //loop the 2nd number
{
rez2 = nr2->multiply(p2->info * t); //multiply the 1st list with an int
cout<<"rez2 "<<rez2;
rezultat = *rezultat + rez2;
cout<<"rezultat "<<rezultat;
t *= 10; //that carry 
p2 = p2->next;
}
return rezultat;
}
Numar*Numar::operator*(Numar*nr2)//重载运算符*
{
Lista*L=新Lista;
Numar*rezultat=new Numar(L);//将列表链接到数字
Lista*aux=新Lista;
Numar*rez2=新Numar(aux);//辅助
int t=1;
Nod*p2=this->L->prim;//此节点的第一个节点
while(p2)//循环第二个数字
{
rez2=nr2->multiply(p2->info*t);//将第一个列表乘以一个int

问题是这个定义对你打算做的事情不起作用

Numar *Numar :: operator* (Numar *nr2) 
如果要定义类型
Numar
和,则需要处理值(最终是常量或右值引用),而不是指针。否则,一旦进行了一些临时计算,就会泄漏内存

因此,您需要修改代码设计,以便最终得到以下签名:

Numar Numar :: operator* (Numar nr2) 
要使其发挥作用,
Numar
Lista
需要实现

编辑:为了避免在不必要时复制值,您可能希望(如注释中的建议)选择:

Numar Numar :: operator* (const Numar& nr2) 

但是,考虑到常量,在nr2上调用的成员函数的定义中可能需要一些规则。

仅仅从代码中向人们抛出一个函数,并说它不起作用,并不能给他们提供任何有用的信息。有许多方法可以使用链表来表示“大量”,因此这些“大数”的乘法有很多种方式可能会实施。投票以不清楚的方式结束。@Peter当然是对的。同时,您可能会将所有相关的
int
更改为
long
。根据数字的大小,这可能会改善您的问题。但是,也可能会溢出
long
类型通常为64位宽。这可能应该是
Numar Numar::operator*(const Numar&nr2)
,以避免复制
Numar
对象,这看起来很昂贵(至少一次调用
new
)@1201programalam是的,这的确是个好主意!在回答中有一个链接指向另一个问题,其中详细讨论了操作员的常用签名。但我将编辑以强调这一点