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
4

2 に答える 2

1

Aにはs ではなくsListが含まれている必要があります。おそらくメンバーのタイプを修正する必要があります:CellList

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

私はqueueそれが何をすべきかわからないのでわかりませんが。

于 2013-10-13T15:44:54.787 に答える
1

最初のエラーはこの行を参照していると思います

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 へのポインターを保持するためです。

于 2013-10-13T15:45:03.450 に答える