Új hozzászólás Aktív témák
-
Krono91
csendes tag
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ázsapublic:
//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
-
Krono91
csendes tag
válasz
Jester01 #2647 üzenetére
Ebben igazad van azt már én is átírtam, a kód lefordul utána, de ha megnézed akkor nem lát bele a ListaElem struktúrába a Lista, és nem tudom miért... a favágó megoldás az most hogy külön headerben tárolom a ListaElemet, és friend class a Lista, így látja a privát adattagokat, és így már működik...
De sajnos nem tudom a miértjét:S -
Krono91
csendes tag
Hellosztok.
Szeretném megtudni hogy ez a kódrészlet miért nem működik helyesen:
template<class Adat>
class Lista
{
struct ListaElem // privát struktúra így nem kell a friend ami nehezíti az olvashatóságot, és így tényleg senki nem fér hozzá ehhez az adattaghoz
{
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) :n(next), p(prev) {}
};
ListaElem *first; // Első eleme a listának strázsa
ListaElem *last; // Utolsó eleme a listának strázsapublic:
//Lista konstruktora, strázsák létrehozása
Lista()
{
//Strázsák létrehozása
first = new ListaElem;
last = new ListaElem;
first->pre = 0; // nem ismeri a fordító a pre pointert...
first->next = last; // nem ismeri a fordító a next pointert...
last->pre = first;
last->next = 0;
}
}A problémám a Lista konstruktorával van, bele is kommenteltem a megakadásom okát.
Elképzelhető hogy én vagyok nagyon fáradt és valmai triviális dolgot nem veszek észre de akkor sem látom, mi lehet a hiba.
A segítséget előre is köszönöm
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Hardcore café
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Az áremelések és a GTA VI késése miatt nem költekeznek a játékosok?
- Horgász topik
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Autós topik
- Milyen légkondit a lakásba?
- Luck Dragon: Asszociációs játék. :)
- Bittorrent topik
- Melyik tápegységet vegyem?
- További aktív témák...
- TP-Link ER-7212PC Omada 3-in-1 Gigabit VPN Router
- TP-Link EAP Omada Wifi AP-k (225, 245, 615)
- Mars Gaming ML-LCD240 2x ARGB 120mm FDB Fan LCD Display (Alkatrésznek) INGYEN FOXPOST
- CORSAIR K55 RGB PRO XT (Kartámasz nélküli) INGYEN FOXPOST
- Szép! Dell Latitude 7430 ÜTÉSÁLLÓ! Üzleti Profi Ultrabook 14" -60% i5-1245U 16/512 FHD IRIS Xe
- BESZÁMÍTÁS! GIGABYTE AORUS MASTER RTX 3070 8GB GDDR6 videokártya garanciával hibátlan működéssel
- Samsung Galaxy S6 Lite (2022) , 4/64 GB ,Wi-fi
- Fotós felszerelés - Stúdió lámpa / Softbox / Vaku
- Apple iPhone 13 . 128GB , Kártyafüggetlen , 100% akku
- SAMSUNG DDR4 REG ECC 32GB 2666MHz RDIMM szerver RAM modulok, nettó 15740Ft+ÁFA, 1 év gar., több db
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest