Mit mehreren Methoden auf die selbe Liste zugreifen



  • Hi!

    Ich versuche gerade mit einer Liste zu arbeiten. Allerdings kann ich diese nicht global deklarieren. So geht es:

    void CtestDlg::OnBnClickedButton1()
    {
    	CList <CString, CString> liste;
    	POSITION pos;
    	CString m;
    
    	liste.AddTail("Eins");
    	liste.AddTail("zwei");
    	liste.AddTail("Drei");
    
    	pos = liste.GetHeadPosition();
    
    	while(pos != NULL){
    		m = liste.GetNext(pos);
    		MessageBox(m);
    	}
    }
    

    Allerdings wird ja dann die Liste jedes mal neu initialisiert, was ja falsch ist.
    Jetzt suche ich nach einer Möglichkeit, die Liste nur einmal bei Aufruf des Programms zu initialisieren...



  • Warum machst Du die Liste nicht zum Member Deiner Klasse?



  • Hm, bin leider n Noob.

    Kannste mir bitte kurz erklären wie das geht?



  • Hallo

    Du arbeitest mit MFC und weißt nicht, was Klassen sind?

    chrische



  • Na ja, in etwa so:

    im .h File:

    class CtestDlg
    {
    
     ....
    
    private:
        CList <CString, CString> m_liste; 
    };
    

    und im .cpp:

    BOOL CtestDlg::OnInitDialog()
    {
    
       ...
    
       m_liste.AddTail("Eins");
       m_liste.AddTail("zwei");
       m_liste.AddTail("Drei");
    
    }
    
    void CtestDlg::OnBnClickedButton1()
    {
        POSITION pos = m_liste.GetHeadPosition();
        while(pos)
        {
            MessageBox(m_liste.GetNext(pos));
        }
    }
    

    Wie Du die OnInitDialog() mit Hilfe der IDE erzeugst, weisst Du hoffentlich.



  • Genau so hatte ich es auch gemacht, aber ich bekomme die folgenden Fehler:

    Compiling...
    testDlg.cpp
    test.cpp
    c:\TMP\test\testDlg.h(36) : error C2143: syntax error : missing ';' before '<'
    c:\TMP\test\testDlg.h(36) : error C2501: 'CtestDlg::CList' : missing storage-class or type specifiers
    c:\TMP\test\testDlg.h(36) : error C2238: unexpected token(s) preceding ';'
    Generating Code...
    

    Edit: Zeile 36 ist diese:

    CList <CString, CString> m_liste;
    

  • Administrator

    probier mal in deiner testDlg.h oben ein

    #include <afxtempl.h>
    

    hinzuzufügen. In diesem Header ist nämlich die CList Klasse definiert. Um sie zu verwenden muss man den Header includieren. Steht sogar in der MSDN bei der Klasse CList.

    Aja und CList<CString, CString> gibt es schon als CStringList.

    Grüssli



  • Danke, hat wunderbar funktioniert.

    Mit

    CList <CString, CString> m_liste;
    

    gings net, aber mit

    CStringList m_liste;
    

    schon.

    Komisch...



  • Pegasus schrieb:

    Danke, hat wunderbar funktioniert.

    Mit

    CList <CString, CString> m_liste;
    

    gings net, aber mit

    CStringList m_liste;
    

    schon.

    Komisch...

    Wirklich? Schreib doch mal:

    CList <class CString, class CString> m_liste;


Anmelden zum Antworten