Új hozzászólás Aktív témák

  • Krono91

    csendes tag

    válasz emvy #2651 üzenetére

    Reggel amint lesz rá időm nekiesek és átnyálazom az erről szóló dolgokat.

    A többieknek csak hogy a hibát kicsit jobban specifikáljam:
    Ha a ListaElem konstruktorát kijavítom ez a kódrészlet nekem tökéletesen lefordul, de ha használni szeretném már nem tudom.
    Első gyors ránézésre azonnal feltűnik hogy a Lista konstruktorában mikor a strázsákat hozom létre a next és pre pointereket mintha nem definiáltam volna. tehát olyan mintha a a Lista osztály nem látná a ListaElem struktúra belső felépítését.

    A megoldás az lett hogy létrehoztam egy ListaElem.h headert és abba tettem bele ezt a kódrészletet:
    template <class Adat>

    class ListaElem // privát struktúra így nem kell a fiend ami nehezíti az olvashatóságot, és így tényleg senki nem fér hozzá ehhez az adattaghoz
    {
    friend class Lista;

    Adat data; // maga az adat része az objektumnak
    ListaElem *next; // a listában következőre mutató pointer
    ListaElem *pre; // a listában előzőre mutató pointer

    //ListaElem konstruktora, ezzel már azonnal beszúrhatóvá is válik 2 listaelem közé
    ListaElem(ListaElem *next = 0, ListaElem *prev = 0) :next(next), pre(prev) {}
    };

    A másik headerben a generikusság miatt egy kis átalakítással pedig ez maradt:
    #include "ListaElem.h"

    template<class Adat>
    class Lista
    {
    ListaElem<Adat> *first; // Első eleme a listának strázsa
    ListaElem<Adat> *last; // Utolsó eleme a listának strázsa

    public:
    //Lista konstruktora, strázsák létrehozása
    Lista()
    {
    //Strázsák létrehozása
    first = new ListaElem<Adat>;
    last = new ListaElem<Adat>;
    first->pre = 0;
    first->next = last;
    last->pre = first;
    last->next = 0;
    }
    };

    Ekkor már tökéletes a kód és használható is.
    A kérdés az hogy az első megoldásom miért nem helyes.
    El szeretném kerülni a friend class használatát és egy belső privát struktúrában szeretném tárolni a ListaElemek felépítését.

    Bocsánat ha ködösen fogalmaztam elsőre, de már tényleg lassan alvás idő van :D

Új hozzászólás Aktív témák