CTypedPtrList in CTypedPtrList



  • Einen wunderschönen guten Morgen zusammen,

    ich habe eine Frage:
    Ist es möglich eine Liste vom Typ CTypedPtrList in eine übergeordnete Liste zu packen? Wenn ich das versuche gibt mir der Compiler nen Fehler aus.

    Ziel ist eine Oberliste, die Pointer zu Unterlisten enthält, die jeweils Daten enthalten.

    Ich benutze VS2005 und mein Code bislang ist folgender:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*>> ober_liste;
    
    ober_liste.AddTail(new CTypedPtrList<CObList, Data*> ); // und hier tritt der Fehler auf
    

    Der Fehler besagt, dass
    eine Typumwandlung von CTypedPtrList<>* nicht in CTypedPtrList<> funktioniert.

    Ist auch einleuchtend. Wenn ich dann aber vorher der Unterliste einen Pointer zuweise und diesen dereferenziere (Richtiges Wort??) mit &pUnterliste kommt die Fehlermeldung

    CTypedPtrList<>**__w64 kann nicht in CTypedPtrList<> umgewandelt werden.

    Hat jemand eine Idee, was ich falsch mache oder wie ich das Problem umgehen kann? Meine Idee wäre es eine Neue Klasse "Unterliste" zu erstellen, die eine Liste der Objekte "Data" als Member hat. Sinnvoll? Oder gibt es eine einfachere Lösung?

    Herzlichen Dank und einen schönen Gruß
    kyp



  • kyp schrieb:

    Der Fehler besagt, dass
    eine Typumwandlung von CTypedPtrList<>* nicht in CTypedPtrList<> funktioniert.

    Klar, du versuchst auch einen Pointer an etwas zu übergeben, wo ein Objekt erwartet wird. Also entweder du packst Zeiger in die Liste ('CTypedPtrList<CPtrList,CTypedPtrList<CObList, Data*>>') oder du verzichtest auf den new-Aufruf und schreibst 'ober_liste.AddTail(CTypedPtrList<CObList, Data>() );'

    Ist auch einleuchtend. Wenn ich dann aber vorher der Unterliste einen Pointer zuweise und diesen dereferenziere (Richtiges Wort??) mit &pUnterliste kommt die Fehlermeldung

    CTypedPtrList<>**__w64 kann nicht in CTypedPtrList<> umgewandelt werden.

    & ist der Adress- (bzw. Referenzierungs-) Operator, zum Dereferenzieren brauchst du *.



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • kyp schrieb:

    Ich benutze VS2005 und mein Code bislang ist folgender:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*>> ober_liste;
    

    Da fehlt zumindestens schon mal ein Leerzeichen:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*> > ober_liste;
                                                       ^^^
    


  • jencas schrieb:

    kyp schrieb:

    Ich benutze VS2005 und mein Code bislang ist folgender:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*>> ober_liste;
    

    Da fehlt zumindestens schon mal ein Leerzeichen:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*[b]> >[/b] ober_liste;
    

    Aus Portabilitätsgründen korrekt, aber VC8 benötigt dieses Leerzeichen nicht.



  • Vielen Dank an alle!!!

    Das hat geholfen. Jetzt scheint es zu funktionieren!

    kyp



  • Konrad Rudolph schrieb:

    jencas schrieb:

    kyp schrieb:

    Ich benutze VS2005 und mein Code bislang ist folgender:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*>> ober_liste;
    

    Da fehlt zumindestens schon mal ein Leerzeichen:

    CTypedPtrList<CPtrLst, CTypedPtrList<CObList, Data*[b]> >[/b] ober_liste;
    

    Aus Portabilitätsgründen korrekt, aber VC8 benötigt dieses Leerzeichen nicht.

    obwohl d

    Das ist das erste Mal, dass ich erlebe, dass M$ etwas im Compiler implementiert hat, bevor es C++ Standard wird. 😉


Anmelden zum Antworten