Problem mit globaler Clist klasse



  • Hi ich hab seit ner weile nen dickes problem mit ner Clist klasse die ich global brauche in 2 dialogen klassen der mfc hab shcon versucht
    die definition

    CList< Person, Person&> myPeople;
    

    in ne header datei und einbinden gibt jede menge LNK 2005 fehler ... bereits in hauptdialogname.obj definiert
    das gleiche wenn ich die definition in ne cpp datei mach und das einbind auchmit extern als verweis in den dateien wosgenutz wird wenn ich die CList als static mach geht alles durch den linker aber dann funktioniert der zugriff nurim hauptdialog und im 2 modalen wird gemeldet das das teil leer ist... also in ne klasse als static zu verpacken geht uach net immer das gleiche fals jemand mit lobalen erfahrung hat immerher damit.



  • als nachtrag ich nutz Visual C++ 2003 und fals jemadn ne andere idee hat ne struct als liste muss nur single linked sein global in der shittign mfc zur verfügung zu stellen immer her damit



  • Was spricht gegen std::vector !?
    Bei CList reicht auch:

    CList<Person>
    


  • hmmm vector nie benutz hmmm nur in buch gesehen die platten unabhängige funktionne hatte aber geht das auch mit ner belibigen struct und wird das bei meinem problem helfen ????



  • Sowohl das CList als auch das vector geht mir einer beliebigen Strukt, solange sie "kopierbar" ist...
    Zeig am besten man die Strukt, dann sag ich Dir ob es geht oder nicht 😉



  • struct Person
    {
    	CString NICK;
        CString NAME;
        CString NAME2;
        CString TEL;
        CString MOBIL;
        CString TEL2;
        CString MAIL;
        CString WEB;
        CString AIM;
        CString ADRS;
        COleDateTime BDATE;
    };
    

    hehe alles mfc ^^ *g* hab zwar nen book angefangen write portable code bina ber noch nit so weit gekommen :p



  • Ja.. und was ist jetzt das Problem mit CList<Person> !?



  • Das problem ist das er nich linken will wenn ich eine global nutzen will also in 2 klassen per include die datei seies cpp oder h einbinde um dann myPeople zu nutzen

    myPeople error LNK2005: "class CList<struct Person,struct Person const &> myPeople" (?myPeople@@3V?$CList@UPerson@@ABU1@@@A) bereits in myPeopleDlg.obj definiert
    

    das is die genaue fehler meldung und zwar 2 mal einfach nur eine datei die so aussieht:

    #pragma once
    #include "stdafx.h"
    #include "afxtempl.h"
    
    struct Person
    {
    	CString NICK;
        CString NAME;
        CString NAME2;
        CString TEL;
        CString MOBIL;
        CString TEL2;
        CString MAIL;
        CString WEB;
        CString AIM;
        CString ADRS;
        COleDateTime BDATE;
    };
    
    CList<Person> myPeople;
    

    und die 2 mal rein gehauen
    wenn ich static vor die Clist mypeople hau kommt kein fehler aber in der klasse der modalen dialog box wo er auf die gleiche variable zuggreift is die liste leer obwol sie im haupt dialog gefüllt und angezeigt worden is mit bewegen in den elementen ohne probs



  • Du musst das ganze natürlich in eine H-Datei tun und mit einem "extern" versehen!!!

    struct Person
    {
        CString NICK;
        CString NAME;
        CString NAME2;
        CString TEL;
        CString MOBIL;
        CString TEL2;
        CString MAIL;
        CString WEB;
        CString AIM;
        CString ADRS;
        COleDateTime BDATE;
    };
    
    extern CList<Person> myPeople;
    

    Und dann in einer CPP-Datei das so instanziieren:

    CList<Person> myPeople;
    


  • noch nen nachtrag habs mit pointer versuch auch nix:

    static CList<Person> *myPeople;
    

    compiliert und linkt dann krazt das prob beim starten ab wenn der was damit macht und das macht der so gut wie immer 😃 ( Offset: 000035ca die ganze list is zuviel *g* hilft aber bestimmt eh nich)
    hmm vieleicht könnte ich die pointer adresse an das 2. modale dialog übergeben und dann zugreifen aber so langsam verlier ich echt dne mut ob das geht...



  • Klar kannst du die Adresse übergeben. Oder du machst das Array als Referenz, dann kann es nicht NULL sein.
    In einen Header, den alle Klassen kennen, die die Liste nutzen sollen muss das hier:

    typedef CList<Person> PersonenListe;
    

    Nun kannst du die Liste mit einem

    CDialogKlasse::CDialogKlasse(PersonenListe& dieListe)
    : m_dieListe(dieListe)
    {
    }
    

    dem Dialog übergeben. m_dieListe ist auch vom Typ PersonenListe&.

    Nun musst du die Liste zwar gleich bei der Deklaration mitgeben, aber sie ist definitiv immer verfügbar und du sparst dir Zeigerprüfungen.

    Okay? 🙂



  • danke eh hat echt geholfen bin jetzt meilen weiter habs zwar nen wing anders gemacht mit ner extra set funktion lag aber daran das der nur gemotzt hatte von wegen standartconstrucktor wo der die parent haben muss also habich gesagt KACK auf die mfc jetzt gehts *g* ^^ big thxnochma ichdenk ich werd mich regggen is echt gut auch einfache sachen nochma von anderen aufmunternt erzält zu bekommen hilft wirklich ^^ werd auch ab und zu helfen hier fragen zu beantworten (plane selbst noch ne FAQ site zu coden dauert aber da ich in PHP + MySQL serh lam und faul bin (umständliches coden mehrer datien + MySQL admin + server uppen usw)
    aber wie gesagt big thx 👍 👍 👍 👍


Anmelden zum Antworten