如何解决为什么我不能使用正确的重载函数Poly_Mult
我正在尝试编写一个处理多项式乘法,除法等的类。
在头文件中,我有我的类定义,在其中我具有那些公共功能:
void Poly_Mult(const Polynomial& Poly);
void Poly_Divide(const Polynomial& Poly);
还有两个朋友功能:
friend Polynomial Poly_Mult(const Polynomial& Poly1,const Polynomial& Poly2);
friend Polynomial Poly_Divide(const Polynomial& Poly1,const Polynomial& Poly2);
我已经毫无问题地定义了两个Poly_Mult函数,并且尝试使用它们来定义Poly_Divide函数。 对于朋友功能,我没有问题。但是,在成员函数中:
bool Polynomial::Poly_Divide(const Polynomial& Poly)
{
if (Poly.m_Degree == 0)
return false;
Polynomial result;
result.m_Degree = this->m_Degree - Poly.m_Degree;
result.m_Variable = this->m_Variable;
Polynomial reduced(*this);
double GuidingFactor = Poly.m_Terms[Poly.size() - 1].Factor();
while (reduced.m_Degree >= Poly.m_Degree)
{
int exp = reduced.m_Degree - Poly.m_Degree;
double termFactor = reduced.m_Terms[reduced.size() - 1].Factor() / GuidingFactor;
//I get an error on this next line. The compiler doesn't seem to find to right overloaded function for Poly_Mult
reduced.Poly_Subtract(Poly_Mult(Poly,Polynomial(termFactor,Poly.m_Variable,exp)));
result.m_Terms.push_back(VarPower(termFactor,exp));
reduced.Simplify();
}
result.Simplify();
*this = result;
if(reduced.size() == 1 && reduced.m_Terms[0].Factor() == 0 && reduced.m_Terms[0].Exponent() == 0)
return true;
else
return false;
}
该代码在Friendly函数中的功能相同,并且可以按预期完美运行,没有错误。
而不是整个详细功能,因为Friendly函数可以正常工作,但是同样,编译器似乎找不到正确的重载函数。 我确实没有在这里看到问题,因为函数具有不同的参数,所以我看不出模棱两可。
通过简化代码,我遇到了同样的问题:
在我的头文件中,我有我的类定义:
class Polynomial
{
private:
int m_Degree;
public:
Polynomial(int degree)
: m_Degree(degree) {};
Polynomial(const Polynomial& Poly)
: m_Degree(Poly.m_Degree) {};
Polynomial& operator=(const Polynomial& Poly)
{
m_Degree = Poly.m_Degree;
}
void Multiply(const int& number);
friend Polynomial Multiply(const Polynomial& Object,const int& number);
void Divide(const int& number);
friend Polynomial Divide(const Polynomial& Object,const int& number);
};
然后,在我的cpp文件中,我实现了功能:
#include "Polynomial.h"
void Polynomial::Multiply(const int& number)
{
m_Degree *= number;
}
Polynomial Multiply(const Polynomial& Object,const int& number)
{
return Polynomial(Object.m_Degree * number);
}
void Polynomial::Divide(const int& number)
{
Polynomial copy = *this;
Polynomial result = Multiply(copy,(1./number)); //This is where the problem is. The compiler doesn't find the right overloaded function
*this = result;
}
Polynomial Divide(const Polynomial& Object,const int& number)
{
Polynomial result = Multiply(Object,(1. / number));
return result;
}
我得到那些错误:
错误C2660:“多项式::乘”:函数没有2个参数
不存在合适的构造函数来将“ void”转换为“多项式”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。