std::list Wie bekomme ich den zeiger zurück ?
-
Hallo,
Ich habe eine Klasse Kopf , die eine Liste mit Positionen hat.
class Kopf { public: std::list<Position*> m_pobPosition; };Und dann habe ich eine andere Klasse- UnterKopf
[code]
class UnterKopf :public Kopf
{public:
std::list<UnterPosition*> m_pobPosition;};
Jetzt möchte ich den Zeiger , der auf diese Liste >Position> zeigt
umbiegen . Er soll zeigen auf die Liste <UnterPosition>.Mein Problem ist , ich weiß nicht wie ich den Zeiger , der auf die Liste <Position> zeigt zurückbekomme .
Danke.
LG, Rixa
-
Rixa schrieb:
Hallo,...
Du solltest deine Frage nochmal so formulieren das man sie eindeutig verstehen kann.
Jetzt aber mehrere Anmerkungen vielleicht ist darin auch deine Frage beantwortet:
a) Membervariablen sollte man nicht public deklarieren
b) Du kannst keinen Container eines Types in einen eines anderen Types konvertieren, nur kopieren.
c) Du kannst einen Zeiger auf eine Basisklasse in einen der entsprechenden Unterklasse mittels dynamic_cast konvertieren, sofern das Objekt dahinter tatsächlich einen damit kompatiblen Typ entspricht.
d) Dir ist hoffentlich bewusst das du mit der definition der Liste in der abgeleiteten Klasse die gleichnamige in der Basisklasse überdeckst.
e) Mit Polymorphie hast du dich hoffentlich schonmal beschäftigt. Du kannst in eine Liste mit Zeigern auf die Basisklasse auch Objekte der abgeleiteten speichern.cu André
-
meinst du zufällig...
std::list<Position> * m_pobPosition; //statt std::list<Position*> m_pobPosition;wenn du m_pobPosition auf die liste mit den UnterPositionen zeigen lassen willst, das geht nicht.
vielleicht willst du auch etwas anderes und ich verstehe dich nicht.
-
Danke , für eure Antworten.
Ich versuch's nochmals.
1 *
Kopf ---- > KopfItem <---- pobPosition
| |
| |
Unterkopf UnterkopfItem <---- pobUnterpositionIch habe eine Basisklasse : Kopf
Diese Basisklasse hat eine Collection: pobPosition , die Objekte vom Typ KopfItem beinhaltet.Dann habe ich eine Klasse Unterkopf , die hat eine Collection: pobUnterposition, duie Objekte der Klasse: UnterkopfItem beinhaltet.
Die Klasse: Unterkopf ist von der Klasse: Kopf abgeleitet. Die Klasse UnterkopfItem ist von der Klasse : KopfItem abgeleitet.
Ich möchte , ( ich denke , dass das geht ) den Zeiger , mit dem der Kopf auf seine Collection :pobPositionen zeigt , holen und ihn auf die Collection
pobUnterposition zeigen lassen.Viele Grüße, Rixa
-
leider ,
ist meine Zeichnung zusammengeschoben worden . Ich versuch' nochmal:1 *
Kopf ---- > KopfItem Das ist die: <---- pobPosition
| | Diese Strichle bedeutetn : Ableitung
| 1 * |
Unterkopf ---- > UnterkopfItem Das ist die: <---- pobUnterpositionIch habe also 2 Klassen:
Unterkopf ist abgeleitet vom Kopf
Unterkopitem vom Kopfitem.Kopf hat eine Collection pobPosition , die Objekte der Klasse: KopfItem beinhaltet.
Unterkopf hat eine Collection pobUnterposition , die Objekte der Klasse: UnterkopfItem beinhaltet.Danke.
Grüße, Rixa
-
1 * Kopf ---- > KopfItem <---- pobPosition | | | | Unterkopf UnterkopfItem <---- pobUnterposition
-
Rixa schrieb:
Ich möchte , ( ich denke , dass das geht ) den Zeiger , mit dem der Kopf auf seine Collection :pobPositionen zeigt , holen und ihn auf die Collection
pobUnterposition zeigen lassen.Welcher Zeiger denn?
Namen sind Schall und Ruach und lenken in diesem Falle nur ab, ich versuch noch mal, das Ganze zu ordnen:class ItemA { /* ... */ }; class ItemB : public ItemA { /* ... */ }; class A { public: std::list<ItemA*> m_a; }; class B : public A { public: std::list<ItemB*> m_b; };was nun? welches Problem soll glöst werden?
-
Danke codetagger !
So wollte ich es dartsellen !Hallo Camper,
Ich möchte jetzt dass die Klasse A auf die Elemente der Collection
std::list<ItemB*> m_b zugreifen kann.Normaleweise kann sie das nicht , aber wenn ich der Klasse A sagen kann ,
du hast jetzt die Collection m_b und nicht m_a dann müsste es gehen .
Aber wie ?Viele Grüße ,Rixa
-
Rixa schrieb:
Ich möchte jetzt dass die Klasse A auf die Elemente der Collection
std::list<ItemB*> m_b zugreifen kann.m_b von welchem Objekt vom Typ B?
-
Hallo camper,
m_b von welchem Objekt vom Typ B?
ja. Ich benutze deine Dekl. die m_b Liste hängt am Objkt der Klasse B.
Ich möchte aber , dass Objekt der Klasse A sie kennt .
Rixa
-
rixa schrieb:
ja. Ich benutze deine Dekl. die m_b Liste hängt am Objkt der Klasse B.
Ich möchte aber , dass Objekt der Klasse A sie kennt.
Dann musst du sie zur Membervariable der Klasse A machen..
-
Hallo Badestrand,
Dann musst du sie zur Membervariable der Klasse A machen..
Das kann ich nicht . Die Basisklasse gehört zur Fremdimplementation.
Grüße , Rixa
-
Wenn du ein Objekt vom Typ A hast (erzeugt durch
A a;oderA* a = new A();), dann kannst du nicht an die Liste von B rankommen, das geht einfach nicht, weil sie in dem Objekt einfach nicht existiert. Genauso wenig, wie ich jetzt innerhalb von drei Sekunden einen warmen Kaffee aus Peru in der Hand halten könnte.
-
Hallo Rixa,
da kann ich Badestrand absolut recht geben.
Falls du dich jetzt dazu entscheiden willst aus der Liste nen Zeiger
auf eine Liste zu machen und den in dem Konstruktor von Unterkopf
umbiegen willst, kriegst du allerdings auch Probleme.class Kopf { protected: std::list<Position*>* m_pobPosition; }; class UnterKopf : public Kopf { public: UnterKopf(); private: std::list<UnterPosition*> m_upobPosition; }; UnterKopf::UnterKopf(){ m_pobPosition = &m_upobPosition; // Das geht leider nicht }http://www.research.att.com/~bs/bs_faq2.html#conversion
Ich wollte dich nur schonmal vorwarnen

Ich glaub auf sowas wolltest du eigentlich hinaus.
Sowas kann man wohl mit Templates (solange es nicht virtual ist) umgehen.
Wenn du eigentlich darauf hinaus wolltest, sag Bescheid, ich kuck morgen
(äh, heute abend) wieder rein.btw: Soll Unterkopf denn auch ne Position-Liste haben oder nur eine
Unterposition-Liste?Gruß,
CSpille
-
Hallo CSpille ,
vielen Dank ! Ja , genau so wollte ich es machen.
Hmm, schade das es nicht geht.
Viele Grüße, Rixa