erreur: не удалось преобразовать 'Cell <int> *' в 'List <int> *' в назначении

0

У меня есть проблема в моей функции, которая добавляет элемент в мой связанный список.

Вот мой код функции:

template <class T> class Cell
{
        public:
                Cell<T>* suivant;
                T data;

                //Constructeur & Destructeur
                Cell(T Val);
};


template <class T> class List
{
        private:
                List<T>* tete;
                List<T>* queue;
                int longeur;

        public:
                //Constructeur & Destructeur
                List<T>(void);
                ~List<T>(void);

        int ajout_en_tete (T Val);
        int ajout_en_fin  (List<T>& a, T Val);
        void concat (List<T>& a , const List<T>& b);
        void copie (const List<T>& a, List<T>& b);
        int supprimer (List<T>& a, int pos);
        void supprimer_liste(void);
        int Taille (const List<T>& a);
        int acces (const List<T>& a , int pos);
        void afficher (List<T>& a);
        void test_vide(List<T>& a);

};



template <class T> List<T>::List(void)
{
    tete = NULL;
    queue = NULL;
    longeur=0;
}

template <class T> List<T>::~List(void)
{
        supprimer_liste();
}

template <class T> Cell<T>::Cell(T Val)
{
        suivant = NULL;
        data = Val;
}

template <class T> int List<T>::ajout_en_tete(T Val)
{

    Cell<T>* C = new Cell<T>(Val);
    if(longeur==0)
    { 
        tete=C;
        queue=C;
        longeur+=1;

    }
    else
    {

        C->suivant=tete;
        tete=C;
        longeur+=1;
    }  

    return 0;
}

У меня есть эта ошибка, что я не понимаю смысла:

src/main.cpp:16:19:   instantiated from here
src/liste.h:73:24: erreur: cannot convert ‘Cell<int>* to ‘int* in initialization
src/liste.h:76:3: erreur: cannot convert ‘int* to ‘List<int>* in assignment
src/liste.h:77:3: erreur: cannot convert ‘int* to ‘List<int>* in assignment
src/liste.h:84:3: erreur: request for member ‘suivant in ‘* C, which is of non-class type ‘int
src/liste.h:85:3: erreur: cannot convert ‘int* to ‘List<int>* in assignment
Теги:
templates
linked-list

2 ответа

1
Лучший ответ

Я предполагаю, что первая ошибка относится к этой строке

tete=C;

tete имеет тип List<T>*, а C имеет тип Cell<T>*. Эти типы не совпадают, и вы получаете сообщение об ошибке.

Глядя на ваш код, довольно ясно, что это

    private:
            List<T>* tete;
            List<T>* queue;

должно быть действительно

    private:
            Cell<T>* tete;
            Cell<T>* queue;

потому что List содержит указатели на ячейки, не указывающие на большее количество списков.

  • 0
    Спасибо за помощь. Я не заметил этого, потому что я сделал копию / pase своего старого кода (без шаблона).
1

List должен содержать Cell s, а не List s. Вероятно, вам нужно исправить тип члена (ов):

template <class T> class List
{
    private:
        Cell<T>* tete; // <- here
        Cell<T>* queue; // <- here

хотя я не уверен в queue поскольку я не знаю, что он должен делать.

  • 0
    Для чего это стоит, queue является хвостом списка.
  • 1
    @ FrédéricHamidi Хорошо, это имеет смысл. В этом случае он также должен иметь тип Cell<T>* .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню