Objekte meiner Klasse in List



  • Hi Leute!

    Experimentiere grad mit std::list herum.
    Beim Zugriff auf Variablen (wie int usw.) hatte ich keine Probleme.
    Jetzt wollte ich das ganze mal mit einer "kleinen" Klasse probieren um die Zugriffsmöglichkeiten zu testen. Ich erhalte immer wieder eine Fehlermeldung mit der ich leider überhaupt nichts anfangen kann. Meine Entwicklungsumgebung ist Visual C++ 6.0.

    Hier meine Klasse:

    [cpp]
    #ifndef _MyClass_h
    #define _MyClass_h
    
    #include <iostream>
    #include <string>
    #include <list>
    
    class MyUser
    {
    private:
    	std::string name;
    	std::string pass;
    
    public:
    //	MyUser();
    	MyUser(std::string name, std::string pass);
    	void MyUser_Output();
    };
    
    void MyUser::MyUser_Output()
    {
    	std::cout << "Name: " << MyUser::name << std::endl;
    	std::cout << "Pass: " << MyUser::pass << std::endl;
    	std::cout << std::endl;
    };
    
    #endif
    [/cpp]
    

    Hier meine Main:

    [cpp]
    #include "MyClass.h"
    
    using namespace std;
    
    int main()
    {
    	string namen[] = {"Hans", "Thomas", "Fritz", "Bert", "Harald"};
    	string passes[] = {"xyz", "abc123", "Schach", "Ernie", "Hosentraeger"};
    	list<MyUser> UserListe;
    	list<MyUser>::iterator pos;
    
    	for(int i = 0; i <= 5; ++i)
    	{
    		MyUser *uNew = new MyUser(namen[i], passes[i]);
    		UserListe.push_back(*uNew);
    	}
    
    	return 0;
    }
    [/cpp]
    

    😕
    Hier meine Fehlermeldung:

    ===============================================================================
    --------------------Konfiguration: Klasse_und_Liste - Win32 Debug--------------------
    Linker-Vorgang läuft...
    CMain.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall MyUser::MyUser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class
    std::allocator<char> >)" (??0MyUser@@QAE@V?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?$allocator@D@2@@std@@0@Z)
    Debug/Klasse_und_Liste.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Klasse_und_Liste.exe - 2 Fehler, 0 Warnung(en)

    Ich danke schon mal im voraus für die Mühe.

    PS: Wenn hier irgendetwas nicht geklappt haben sollte mit dem Posting, bitte nicht sauer sein, ist mein erstes. 😉



  • Du hast den Kontruktor von MyUser nicht... ehm... definiert(?).



  • Den hab ich bei meinen Endlosversuchen eben einkommentiert (hat aber vorher auch nicht geklappt 😉 ). Trotzdem Danke.



  • Hallo,

    Wo ist dein ctor definiert ? Du hast ihn bis jetzt lediglich deklariert.
    Ich meine

    MyUser::MyUser(std::string name, std::string pass);
    

    btw. Bei der Methode push_back(*MyObject) muss eine Kopie angelegt werden, du hast aber keinen Copy-ctor, das hat jetzt aber nichts mit deinem Problem zu tun.



  • genau wird das problem sein so wie ich das sehe, ist der ctor zwar in der klassenvereinbarung drin aber nich deklariert, denn

    MyUser::MyUser(class std::basic_string<[..]>,class std::basic_string<[..]>)

    ist halt der mit

    MyUser(std::string name, std::string pass);
    

    angezeigte ctor der ja dann wohl nich da is 🙂



  • Du musst noch

    MyUser(std::string name, std::string pass);
    

    ausprogrammieren.



  • Erst mal danke an alle und Etschuldigung an Saugi (hatte deine Antwort falsch verstanden *schääääääm*).
    Habe natürlich vergessen den Konstruktor zu deklarieren. 🙄

    Ok keine Fehlermeldungen mehr aber dafür schmiert mir das Programm mit einer Speicherfehlermeldung ab (vermutlich liegts genau daran was mir prolog näher bringen wollte, ich aber leider noch nicht genau verstehe worauf er hinaus will) 🙄

    Ich bin nicht unbedingt ein Anfänger in Sachen Programmierung (zum mindest nicht in C#) aber leider auch kein Profi.

    Vielleicht kann mir einer einen Denkanstoß (Link, Beispiel, Erklärung) geben,
    ich hab irgendwie heute nicht nur ein Brett vorm Kopf sondern einen ganzen Zaun. 😃



  • btw. Bei der Methode push_back(*MyObject) muss eine Kopie angelegt werden, du hast aber keinen Copy-ctor, das hat jetzt aber nichts mit deinem Problem zu tun.

    Es wird doch automatisch vom Compiler einer generiert. Der reicht doch für diese Klasse.



  • ich denke deine schleife ist falsch. mach mal aus:

    for(int i = 0; i <= 5; ++i)

    das hier:

    for(int i = 0; i < 5; ++i)

    Muss aber nicht daran liegen 🙄 :p



  • doch daran liegts. die arrays haben beide nur 5 elemente, also die indezes 0 bis 4 wenn man auf dassechste zugreift is essig weil des gibts ja nich und wenn dann der ctor was mit den nicht vorhandenen std::string's machen will, weigert er sich halt 🙂



  • ????????????? schrieb:

    btw. Bei der Methode push_back(*MyObject) muss eine Kopie angelegt werden, du hast aber keinen Copy-ctor, das hat jetzt aber nichts mit deinem Problem zu tun.

    Es wird doch automatisch vom Compiler einer generiert. Der reicht doch für diese Klasse.

    Hallo sicherlich reicht es, aber ich bin davon ausgegangen dass es nicht die tatsächliche Klasse ist die er gepostet hat, sondern ein Dummy für die eigentliche Klasse und da kann es zu Problemen kommen.



  • Haaa....

    jetzt funzt es !!! Es war natürlich die Schleife *versteck mich unterm Schreibtisch und komm nie wieder ans Tageslicht* 🙄

    Naja wie gesagt kein Brett sondern ein Zaun vorm Kopf.

    Danke an die rege Teilnahme und für die vielen Antworten.

    @prolog:
    du wirst lachen aber das war die Klasse (falls sie diese Bezeichnung überhaupt verdient hat) ;). Die war ja auch nur zum testen da. Es ging mir ja um die Liste und nicht um Klassen.

    @alle anderen:
    danke und sorry für die blöden fragen, da hätte ich auch selber drauf kommen können. 🙄

    THX


Anmelden zum Antworten