Этот указатель - C ++ связанный список - PullRequest
2 голосов
/ 11 марта 2012

Я пытался создать связанный список со структурами. Идея состоит в том, чтобы использовать 2 разных структуры, один из которых является узлом, а другой - указателем на узлы (поэтому я могу связать узлы вместе).

Но я хотел инициализировать указатель на первый узел как NULL, а затем создать последующие узлы:

У меня ошибка в двух методах конструктора (List и Polynomial), я не могу использовать оператор =, как я. Но я не могу понять, почему.

struct List
{
    //Data members to hold an array of pointers, pointing to a specific node
    Node *list[100];

    //Default constructor
    List();
};

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

class Polynomial
{
    public:
    [...]

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

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

/*******************************************************************************************************************************/
// Method   : initialize()
// Description  : This function creates the linked nodes
/*******************************************************************************************************************************/
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
}

Я получаю ошибки в конструкторе Polynomial и конструкторе List.

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Это не похоже на список ссылок.Может быть, вам нужна структура node (верно?), Содержащая информацию, а List содержит много node после?Если это два, у меня есть два решения:

сначала.очень (и очень) часто встречающийся.

typedef struct nNode{
  int info;
  string name;
  //and any information you want this node has.
  struct nNode *pNext;
} Node;

Второе.Стиль, как я вижу в вашем коде.

typedef struct nNode{
  int info;
  string name;
  //and any information you want this node has
}Node;
typedef struct nList{
  Node node;
  struct nList *pNext;
} List;

Вы видите, вторая версия выглядит как первая:)

2 голосов
/ 11 марта 2012

Из вашего кода не совсем понятно, что именно вы хотите делать.

Но, код:

Node *list[100];

означает массив из 100 указателей на узлы.

Когда вы делаете:

*list[0] = NULL;

вы разыменовываете указатель list [0], а это не то, что вам нужно. list [0] получит вам Node *, а * list [0] получит вам Node.

Либо вы имеете в виду:

list[0] = NULL;

или вы хотите создать массив узлов **. Я не уверен из твоего кода, что ты хочешь.

...