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;
}
Your (first) problem is in this function:
You say you will return an int:
but you return
c
wherec
is aPoly
. change the return type:int Poly::differentiate(int)
has the same problem. Change it toBTW - 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.
The compiler is telling you the exact problem. Your addition method is declared to return an
int
while your varc
is an instance of classPoly
. You need to return anint
.