C++ error: 'No suitable conversion from [class

2019-06-09 20:15发布

I'm working on a class for the addition, subtraction and multiplication of polynomials.

I'm getting the following errors:

'No suitable conversion function from [class name] to "int" '

in statements:

return c;    (addition function)

return deriv;

Can anyone offer any guidance on how to correct these?

Thanks very much in advance, Ryan

Here is my code:

#include "stdafx.h"
#include <iostream>

using namespace std;

class Poly
{
private:

//  int ord;                            // the order of the polynomial
//  int coeff[100];

public:

    int ord;                            // the order of the polynomial
    int coeff[100];


    int a, b, c;
    Poly();                             // constructor
    int addition(int);                  // adds 2 polynomials
    int subtraction(int);               // subtracts 2 polynomials
    int multiplication(int);            // multiplies 2 polynomials
    void evaluate(int);                 // uses Horner's method to compute and return the polynomial evaluated at x
    int differentiate(int);         // 
    void set(int, int);                 // mutator function
    int order();
    void print();                       // prints the results
};

Poly::Poly()            // the default constructor
{
    for (int i = 0; i < 100; i++)
    {
        coeff[i] = 0;
    }
}

void Poly::set(int a, int b)    // mutator function
{
    // coeff = new Poly[b + 1];
    coeff[b] = a;
    ord = order();
}

int Poly::order()
{
    int d = 0;
    for (int i = 0; i < 100; i++)
        if (coeff[i] != 0) d = i;
        return d;
}

void print()
{
    int coeff[] = { 0 };

    for (int i = 99; i >= 0; i--)
    {
        if (coeff[i] != 0)
        {
            cout << coeff[i] << "x^" << i << " ";
        }
    }
}

int evaluate(int x)
{
    int p = 0;
    for (int i = ord; i >= 0; i--)
        p = coeff[i] + (x * p);
    return p;
}

int Poly::differentiate(int)
{
    if (ord == 0)
    {
        Poly t;
        t.set(0, 0);
        return t;
    }

    Poly deriv;
    deriv.ord = ord - 1;

    for (int i = 0; i < ord; i++)
        deriv.coeff[i] = (i + 1) * coeff[i + 1];
    return deriv;
}

int Poly::addition(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] += b.coeff[i];

    c.ord = c.order();

    return c;
}

Poly subtraction(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] -= b.coeff[i];

    c.ord = c.order();

    return c;
}

int Poly::multiplication(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
    for (int j = 0; j <= b.ord; j++)
        c.coeff[i + j] += (a.coeff[i] * b.coeff[j]);
    c.order = c.order();
}

int main()
{
    Poly a, b, c, d;
    a.set(7, 4);                //  7x^4
    a.set(1, 2);                //   x^2

    b.set(6, 3);                //   6x^3
    b.set(-3, 2);               //  -3x^2

    c = a.subtraction(b);       // (7x^4 + x^2) - (6x^3 - 3x^2)

    c.print();

    cout << "\n";

    d = c.differentiate().differentiate();

    d.print();

    cout << "\n";

    cout << c.evaluate(2);  // substitute x with 2
    cin.get();

    return 0;
}

标签: c++ class
2条回答
兄弟一词,经得起流年.
2楼-- · 2019-06-09 20:25

Your (first) problem is in this function:

int Poly::addition(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] += b.coeff[i];

    c.ord = c.order();

    return c;
}

You say you will return an int:

int Poly::addition(Poly b)
//^------ promise to return int

but you return c where c is a Poly. change the return type:

Poly Poly::addition(Poly b)

int Poly::differentiate(int) has the same problem. Change it to

Poly Poly::differentiate(int)

BTW - Why does this take a int which it ignores?

Furthermore, int Poly::multiplication(Poly b) doesn't return anything as it stands.

You have further problems. For example the print and evaluate functions should be member functions and it may make more sense to use a std::vector to store the coefficients.

The compiler probably told you the line number of the error if you look closely.

查看更多
We Are One
3楼-- · 2019-06-09 20:32

The compiler is telling you the exact problem. Your addition method is declared to return an int while your var c is an instance of class Poly. You need to return an int.

查看更多
登录 后发表回答