Создание связанного списка со структурами - C ++ - PullRequest
0 голосов
/ 11 марта 2012

Я писал программу, которая могла бы читать входной файл и сохранять прочитанные данные в узлах, связанных «списком ссылок». Однако я получил несколько ошибок:

  1. В конструкторе List::List(), для 'operator =' нет совпадения в *((List*)this)->List::list[0] = 0
  2. В конструкторе Polynomial::Polynomial(): нет совпадения для 'operator =' в *((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;
}
}

1 Ответ

0 голосов
/ 12 марта 2012

Проблема в неправильном разыменовании. Строка 34, вероятно, должна быть

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

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

Кроме того, строка 66 должна, вероятно, b:

 void Polynomial::initialize(ifstream &file) // start with return type
...