gpt4 book ai didi

c++ - 通过链表添加多项式

转载 作者:行者123 更新时间:2023-11-28 05:38:48 24 4
gpt4 key购买 nike

我正在编写代码,通过结构类从用户那里获取两组多项式:

struct Term
{
double coefficient;
unsigned exponent;
Term *next;
};

然后提示要求他们对多项式进行加法、减法或求值(要求用户输入“x”的值)。我在编写加减函数时遇到了问题。到目前为止,我为 add 函数写了这个,但我不确定如何返回新的多项式。根据我对错误消息的理解,我不能将 += 运算符与 TermPtr 类型一起使用。我不确定如何解决这个问题。

TermPtr add(TermPtr p1, TermPtr p2)
{
TermPtr newPoly;

if (p1 -> exponent == p2 -> exponent)
newPoly += ((p1 -> coeff) + (p2 -> coeff));

return newPoly;
}

我收到这些错误:

In function 'Term* add(TermPtr, TermPtr)':
36:19: error: invalid operands of types 'TermPtr {aka Term*}' and 'double' to binary 'operator+'
36:19: error: in evaluation of 'operator+=(using TermPtr = struct Term* {aka struct Term*}, double)'

最佳答案

由于 TermPtr 是 Term* 的类型定义,您的代码试图增加一个指针。如果你想返回一个指针,那么下面的代码应该可以解决问题,但是返回一个指向新术语的指针意味着你必须手动管理内存并稍后删除它,否则会泄漏内存。

 TermPtr add(TermPtr p1, TermPtr p2)
{
TermPtr newPoly = new Term();
newPoly -> exponent = p1 -> exponent;
if (p1 -> exponent == p2 -> exponent){
newPoly -> coeff += ((p1 -> coeff) + (p2 -> coeff));
}


return newPoly;
}

请记住,如果指数不匹配,您仍然会得到一个新项(系数等于 0,假设您的默认构造函数将 0 分配给 coeff)。

你可能想做的是这样的:

Term add(TermPtr p1, TermPtr p2)
{
Term newPoly;
newPoly.exponent = p1 -> exponent;
if (p1 -> exponent == p2 -> exponent){
newPoly.coeff += ((p1 -> coeff) + (p2 -> coeff));
}


return newPoly;
}

这样您以后就不必自己管理内存了。

至于总体思路,您可能希望在调用加法之前检查指数,以免以空项结束。

关于c++ - 通过链表添加多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624622/

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