0

我正在尝试编写一个处理多项式乘法、除法等的类。

在我的头文件中,我有我的类定义,其中我有这些公共函数:

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;
}

友元函数中的代码在功能上是相同的,并且可以按预期完美运行,没有错误。

而不是整个详细的函数,因为友元函数工作正常,但同样,编译器似乎没有找到正确的重载函数。我真的看不出这里有什么问题,因为函数有不同的参数,所以我看不出有歧义。

通过简化代码,我遇到了同样的问题:

在我的头文件中,我有我的类定义:

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”转换为“Polynomial”的合适构造函数

4

0 回答 0