У меня есть проблема в моей функции, которая добавляет элемент в мой связанный список.
Вот мой код функции:
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
Я предполагаю, что первая ошибка относится к этой строке
tete=C;
tete
имеет тип List<T>*
, а C
имеет тип Cell<T>*
. Эти типы не совпадают, и вы получаете сообщение об ошибке.
Глядя на ваш код, довольно ясно, что это
private:
List<T>* tete;
List<T>* queue;
должно быть действительно
private:
Cell<T>* tete;
Cell<T>* queue;
потому что List содержит указатели на ячейки, не указывающие на большее количество списков.
List
должен содержать Cell
s, а не List
s. Вероятно, вам нужно исправить тип члена (ов):
template <class T> class List
{
private:
Cell<T>* tete; // <- here
Cell<T>* queue; // <- here
хотя я не уверен в queue
поскольку я не знаю, что он должен делать.
queue
является хвостом списка.
Cell<T>*
.