为什么我这个程序一加构造体constructor就报错?一去掉就好了?
头文件:
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
#include <iostream>
using std::ostream;
using std::istream;
class Polynomial
{
private:
struct NumberElement
{
int coefficient;
int exponent;
struct NumberElement *next;
};
NumberElement *head;
public:
Polynomial()
{
head = NULL;
}
Polynomial(const Polynomial &);
const Polynomial &operator=( const Polynomial &);
Polynomial operator+(const Polynomial &);
void insertElement(int, int);
void display(ostream &) const;
};
ostream &operator<<( ostream &, const Polynomial &);
#endif
类文件:
// Member-function definitions for class Polynomial
#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;
#include "Polynomial.h"
Polynomial::Polynomial(const Polynomial &polyCopy)
{
NumberElement *elementPtr;
elementPtr = polyCopy.head;
NumberElement *nm=new NumberElement;
head=nm;
NumberElement *np=polyCopy.head;
nm->coefficient=np->coefficient;
nm->exponent=np->exponent;
while(np->next!=0)
{
nm=nm->next; np=np->next;
nm=new NumberElement;
nm->coefficient=np->coefficient;
nm->exponent=np->exponent;
}
nm->next = NULL;
}
void Polynomial::insertElement(int a, int b)
{
NumberElement *newElement;
NumberElement *elementPtr;
NumberElement *previousElement = NULL;
newElement = new NumberElement;
newElement->coefficient = a;
newElement->exponent = b;
if(!head)
{
head = newElement;
newElement->next = NULL;
}
else
{
elementPtr = head;
previousElement = NULL;
while(elementPtr!=NULL&&newElement->exponent<elementPtr->exponent)
{
previousElement = elementPtr;
elementPtr = elementPtr->next;
}
if(previousElement==NULL)
{
head = newElement;
newElement->next = elementPtr;
}
else
{
if(elementPtr==NULL)
{
previousElement->next = newElement;
newElement->next = NULL;
}
else
{
previousElement->next = newElement;
newElement->next = elementPtr;
}
}
}
}
const Polynomial &Polynomial::operator=(const Polynomial &right)
{
NumberElement *p,*q, *r;
head = NULL;
if (!right.head)
return *this;
head = new NumberElement;
head->coefficient = right.head->coefficient;
head->exponent = right.head->exponent;
head->next = NULL;
r=NULL;
p=head;
q=right.head->next;
while(q!=NULL)
{
r = new NumberElement;
r->coefficient = q->coefficient;
r->exponent = q->exponent;
r->next = NULL;
p->next = r;
p = p->next;
q = q->next;
}
return *this;
}
Polynomial Polynomial::operator+(const Polynomial &polyAdd)
{
/*Polynomial temp;
temp.head = new NumberElement;
temp = polyAdd;
cout<<temp<<endl;
return temp;
*/
Polynomial temp;
NumberElement *p, *q;
p = this->head;
q = polyAdd.head;
int coefficient, exponent;
temp.head = new NumberElement;
if (p->exponent==q->exponent)
{
coefficient = p->coefficient + q->coefficient;
exponent = p->exponent;
temp.head->coefficient = coefficient;
temp.head->exponent = exponent;
temp.head->next = NULL;
p = p->next;
q = q->next;
}
while(p!=NULL&&q!=NULL)
{
if(p->exponent>q->exponent)
{
coefficient = p->coefficient;
exponent = p->exponent;
temp.insertElement(coefficient, exponent);
cout<<coefficient<<", "<<exponent<<" copied"<<endl;
p = p->next;
}
else if(p->exponent<q->exponent)
{
coefficient = p->coefficient;
exponent = q->exponent;
temp.insertElement(coefficient, exponent);
cout<<coefficient<<", "<<exponent<<" copied"<<endl;
q = q->next;
}
else
{
coefficient = p->coefficient + q->coefficient;
exponent = p->exponent;
temp.insertElement(coefficient, exponent);
cout<<coefficient<<", "<<exponent<<" copied"<<endl;
p = p->next;
q = q->next;
}
}
while (p!=NULL&&q==NULL)
{
coefficient = p->coefficient;
exponent = p->exponent;
temp.insertElement(coefficient, exponent);
cout<<coefficient<<", "<<exponent<<" copied"<<endl;
p = p->next;
}
while(q!=NULL&&p==NULL)
{
coefficient = q->coefficient;
exponent = q->exponent;
temp.insertElement(coefficient, exponent);
cout<<coefficient<<", "<<exponent<<" copied"<<endl;
q = q->next;
}
cout<<temp<<endl;
//Polynomial temp(polyAdd);
return temp;
}
void Polynomial::display(ostream &out) const
{
NumberElement *elementPtr = this->head;
while(elementPtr->next!=NULL)
{
//out<<"begin while"<<endl;
out << elementPtr->coefficient << "X^" << elementPtr->exponent << " + ";
elementPtr = elementPtr->next;
//out<<"end while"<<endl;
}
out << elementPtr->coefficient << "X^" << elementPtr->exponent <<endl;
}
ostream &operator<<(ostream &out, const Polynomial &poly)
{
poly.display(out);
return out;
}
运行文件:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include "Polynomial.h"
int main()
{
Polynomial poly1, poly2, poly3;
int exp, coe;
cout<<"Please input"<<endl;
cin>>coe>>exp;
poly1.insertElement(coe,exp);
cout<<"input again"<<endl;
cin>>coe>>exp;
poly1.insertElement(coe,exp);
cout<<poly1<<endl;
poly2 = poly1;
cout<<poly2<<endl;
poly3 = poly1 + poly2;
cout<<poly3<<endl;
return 0;
}