c ++运算符重载错误。 (最有可能是一些语法错误)

时间:2018-04-08 14:49:15

标签: c++ class pointers overloading operator-keyword

我是操作员重载的新手,我遇到了一个奇怪的错误。该问题要求输入两个多项式,然后将它们的和存储在第三个对象中。 myPolynomial类包含3个私有变量,即" float * degreeArray"," float * coeffArray"和" int terms"。

在main函数中,我有以下代码:

myPolynomial p4;

    p4 =  p1 + p2;
    p4.Print();

plus运算符功能正常工作。这是:

myPolynomial myPolynomial::operator + (myPolynomial &obj) 
{
    int size = 2*terms;
    float arr[size];
    float arr2[size];
    myPolynomial temp(arr,arr2,size);

    int tempIndex = 0;

    bool found;

    for (int i=0;i<terms;i++)
    {
        found = false;
        for (int j=0; j<terms ;j++)
        {
            if (degreeArray[i] == obj.degreeArray[j])
            {
                found = true;

                temp.coeffArray[tempIndex] = coeffArray[i] + obj.coeffArray[j];
                temp.degreeArray[tempIndex] = degreeArray[i];
                tempIndex++;
            }

        }
        if (found == false)
        {
            temp.coeffArray[tempIndex] = coeffArray[i];
            temp.degreeArray[tempIndex] = degreeArray[i];
            tempIndex++;
        }
    }

    int tempSize = tempIndex;
    bool check;

    for (int i=0;i<obj.terms;i++)
    {
        check = false;
        for (int j = 0; j<tempSize ;j++)
        {
            if (obj.degreeArray[i]==temp.degreeArray[j])
            {
                check = true;               
            }
        }
        if (check == false)
        {
            temp.degreeArray[tempIndex] = obj.degreeArray[i];
            temp.coeffArray[tempIndex] = obj.coeffArray[i];
            tempIndex++;
        }
    }
    cout<<"tempIndex = "<<tempIndex<<endl;
    //checking values inside temp
    cout<<endl<<endl;
    for (int i = 0;i<tempIndex;i++)
    {
        cout<<temp.degreeArray[i]<<" ";

    }
    cout<<endl;
    for (int i = 0;i<tempIndex;i++)
    {
        cout<<temp.coeffArray[i]<<" ";

    }
    cout<<endl<<endl;

    temp.terms = tempIndex;
    return temp;

接下来是赋值运算符重载函数,该函数能够正确地从加运算符函数中取出对象并将其复制到类的主要对象(即p4)。但是,它无法正确返回对象以供进一步使用,如Print()等。

以下是代码:

myPolynomial& myPolynomial::operator = (const myPolynomial &obj)  
{

    terms = obj.terms; 
    degreeArray = new float [terms];
    coeffArray = new float [terms];

    cout<<terms;

    for (int i = 0; i<terms; i++)
    {
        degreeArray[i] = obj.degreeArray[i];
    }

    for (int i = 0; i<terms; i++)
    {
        coeffArray[i] = obj.coeffArray[i];
    }
    cout<<"hello"<<endl;

    for (int i=0;i<terms;i++)
    {
        cout<<coeffArray[i]<<" ";
    }

    cout<<endl; 
    for (int i=0;i<terms;i++)
    {
        cout<<degreeArray[i]<<" ";
    }

    return *this;
}

现在,回到int main(),如果我写myPolynomial p4()这意味着我调用默认构造函数而不是一个奇怪的错误消息,我无法理解。

它说:

[错误]无法转换&#39; myPolynomial&#39;到了myPolynomial()&#39;在任务中

如果我写myPolynomial p4;然后代码执行但在执行期间出错。代码执行直到赋值运算符函数,即如果我输出该区域中的某些东西然后工作。

最后,如果我使用参数化构造函数,那么代码可以正确运行。但是,我不能这样做,因为我不知道&#34;术语&#34;新对象&#34; p4&#34;在添加前两个对象的条款之前&#34; p1和p2&#34;。

任何帮助都将不胜感激。

0 个答案:

没有答案