Создание класса Iterator для связанного списка (ошибка: нет подходящего конструктора для инициализации) - PullRequest
1 голос
/ 30 апреля 2019

В функции "Список итераций :: begin ()" {У него есть проблема "нет подходящего конструктора для инициализации" для этой итерации (заголовок).head - указатель узла, и я построил для него конструктор.Я не знаю, в чем проблема.

List.h

#include "Iteratoring.h"
struct Node {
    int data;       // value in the node
    Node *next;  //  the address of the next node

    /**************************************
            **      CONSTRUCTOR    **
    ***************************************/
    Node(int data) : data(data), next(0) {}
};
class List {
private:
    Node *head= nullptr;          // head node
    Node *tail;          // tail node
    Iteratoring begin();
public:
};

List.cpp

#include "List.h"

Iteratoring List::begin() {
    return Iteratoring(head);   //The error is here. no matching constructor for initialization
}

Итерация.h

#include "List.h"

class Iteratoring {
private:
    Node *current;
public:
    Iteratoring(){
        current= nullptr;
    };

    Iteratoring(Node *ptr){
        current=ptr;
    };

};

1 Ответ

0 голосов
/ 30 апреля 2019

Это круговая проблема зависимости.#include "List.h" в Iteratoring.h и #include "Iteratoring.h" в List.h.

Вместо этого следует использовать предварительное объявление .например,

Iteratoring.h

class Node;
class Iteratoring {
private:
    Node *current;
public:
    Iteratoring(){
        current= nullptr;
    };

    Iteratoring(Node *ptr){
        current=ptr;
    };

};
...