2012-03-11 3 views
0

Я писал программу, которая могла читать входной файл и хранить прочитанные данные в узлах, связанных «списком ссылок». Тем не менее, я получаю несколько ошибок:Создание связанного списка с помощью Structs - C++

  1. В конструкторе List::List(), не не подходит для 'оператора =' в *((List*)this)->List::list[0] = 0
  2. В конструкторе Polynomial::Polynomial(): не подходит для 'оператора =' в *((Polynomial*)this)->Polynomial::poly = (operator new(400u), (<statement>), ...)

У меня такое чувство, что я делаю: я пытаюсь получить доступ к определенному узлу через массив, где я ошибаюсь, однако я не могу много понять.

Вот код:

#include <iostream> 
#include <fstream> 

using namespace std; 

enum result{success, failure};       

struct Node 
{ 

double coefficient;       
int power;        

Node();     
Node(double coef, int pwr);  
}; 

struct List 
{ 
Node *list[100]; 

//Default constructor 
List(); 
}; 

Node::Node() 
{ 
coefficient = 0; 
power = 0; 
} 

List::List() 
{ 
*list[0] = NULL; 
} 

Node::Node(double coef, int pwr) 
{ 
coefficient = coef; 
power = pwr; 
} 


    class Polynomial 
    { 
    public: 
    Polynomial();      
    result multiply(Polynomial &p, Polynomial &q); 
    result add(Polynomial p, Polynomial &q); 
    void initialize(ifstream &file); 
    void simplify(Polynomial &var); 
    void print_poly(); 
    ~Polynomial(); 

private: 
    List *poly;       //Store the pointer links in an array 
    Node first_node; 
    int val; 
}; 

Polynomial::Polynomial() 
{ 
*poly = new List(); 
} 

Polynomial::void initialize(ifstream &file) 
{ 
int y[20]; 
double x[20]; 
int i = 0, j = 0; 

//Read from the file 
file >> x[j]; 
file >> y[j]; 

first_node(x[j], y[j++]);      //Create the first node with coef, and pwr 
*poly->list[i] = &first_node;      //Link to the fist node 

//Creat a linked list 
while(y[j] != 0) 
{ 
    file >> x[j]; 
    file >> y[j]; 
    *poly->list[++i] = new Node(x[j], y[j++]); 
} 

val = i+1;        //Keeps track of the number of nodes 
} 


Polynomail::result multiply(Polynomial &p, Polynomial &q) 
{ 
int i, j, k = 0; 

for(i = 0; i < p.val; i++) 
{ 
    for(j = 0; j < q.val; j++) 
    { 
     *poly->list[k] = new Node(0, 0); 
     *poly->list[k].coefficient = (p.poly->list[i].coefficient)*(q.poly->list[j].coefficient); 
     *poly->list[k++].power = (p.poly->list[i].power)+(q.poly->list[j].power); 
    } 
} 

val = k+1;        //Store the nunber of nodes 
return success; 
} 

Polynomial::void simplify(Polynomial &var) 
{ 
int i, j, k = 0; 

//Create a copy of the polynomial 
for(j = 0; j < var.val; j++) 
{ 
    *poly->list[j] = new Node(0, 0); 
    *poly->list[j].coefficient = var.poly->list[j].coefficient; 
    *poly->list[j].power = var.poly->list[j].power; 
} 

//Iterate through the nodes to find entries which have the same power and add them, otherwise do nothing  
for(k = 0; k < var.val; k++) 
{ 
    for(i = k; i < var.val;) 
    { 
     if(*poly->list[k].power == var.poly->list[++i].power) 
     { 
      if(*poly->list.power[0] == 0) 
      { 
       NULL; 
      } 
      else 
      { 
       *poly->list[k].coefficient = *poly->list[k].coefficient + var.poly->list[i].ceofficient; 
       var.poly->list[i] = Node(0, 0); 
      } 
     } 
    } 
} 
} 

Polynomial::void print_pol() 
{ 
int i = 0; 
for(i = 0; i < temp.val; i++) 
{ 
    cout << "Coefficient: " << temp.poly->list[i].coefficient << ", and " << "Power: " << temp.poly->list[i].power << endl; 
} 
} 

ответ

0

Проблема является неправильным разыменовать. Линия 34, вероятно, следует

list[0] = NULL; // remove the * 

Вы пытаетесь присвоить значение NULL для переменной типа Node, но вы, вероятно, означает указатель на узел. Сама же самое верно и в соответствии 63.

Кроме того, линия 66 sould, вероятно, б:

void Polynomial::initialize(ifstream &file) // start with return type 
Смежные вопросы