namespace problem



  • Soll ich alles in eine Klasse packen und die einzelnen Methoden bzw. Liste auch als static definieren?

    Das Ziel soll sein, dass alle Objekte (andere Klassen) in die Liste etwas einfügen und auch entfernen können sollen.



  • Beobachter01 schrieb:

    Soll ich alles in eine Klasse packen und die einzelnen Methoden bzw. Liste auch als static definieren?

    Wäre eine Möglichkeit. Den Iterator brauchst du sowieso nicht dauerhaft halten, der reicht funktionslokal völlig aus.



  • Stimmt ich könnte den Iterator immer wieder lokal anlegen. Danke dir!
    Falls noch Fragen auftauchen sollte komme ich nochmal vorbei 🙂



  • Hi nochmals,

    ich bekomme jetzt so einen Fehler:

    error c2011: 'dataPool' : 'class' type redefinition -> see declaration of dataPool
    

    Ich könnte .....! Namespace wurde als eine statische Klasse mit statischen variabeln und Methoden implementiert. Ich habe versucht die Header-Datei wieder in 2 verschiedenen Klassen eingebunden. Wie bekomme ich das hin, dass nur einmal die Klasse definiert wird und alle Zugriff darauf haben?


  • Mod

    Das klingt so, als hättest du keine Include Guards (mal nach googlen, wenn dir das nichts sagt).



  • falls ich IncludeGuards hinzufüge bekomme ich einen Linker-fehler der mir sagt, dass er auf die statische methode von dataPool nicht zugreifen kann. Wie kann ich dies beheben. Ich wollte eine statische Klasse bereitstellen auf der alle anderen zugreifen können. Werte löschen, ändern hinzufügen usw...


  • Mod

    Beobachter01 schrieb:

    falls ich IncludeGuards hinzufüge bekomme ich einen Linker-fehler der mir sagt, dass er auf die statische methode von dataPool nicht zugreifen kann. Wie kann ich dies beheben. Ich wollte eine statische Klasse bereitstellen auf der alle anderen zugreifen können. Werte löschen, ändern hinzufügen usw...

    Sag mal den genauen Fehler an. Und (hoffentlich) dumme Frage: Die Methode existiert auch irgendwo, oder?



  • 😃 klar existiert die Methode

    module1.obj : error LNK2019: unresolved external symbol "public: static void __cdecl dataPool::setValue<double>(double,int,double)" (??$setValue@N@dataPool@@SAXNHN@Z) referenced in function "public: void __thiscall module1::run(void)" (?run@module1@@QAEXXZ)
    

    Das ist dazugehörige Klasse:

    //dataPool.h
    class dataPool{
    private:
        static std::list<std::string> listenWerte;
    public:
        template<typename T>
        static void setValue(double t, int i, T wert);
        static std::string getValue();
    }
    //dataPool.cpp
    std::list<std::string> dataPool::listenWerte
    
    template<typename T>
    void dataPool::setValue(double t, int i, T wert)
    {
        std::stringstream ss;
        ss<<t<<"\n"<<i<<"\n"<<wert<<"\n";
        listenWerte.push_front(ss.str());
    }
    
    std::string dataPool::getValue(){
        std::list<std::string>::iterator listenWerteIt;
        listenWerteIt = listenWerte.begin();
        std::string wert = *listenWerteIt;
        return wert;
    }
    


  • Die Methode existiert auf jeden Fall nicht dort, wo sie benötigt wird. Aber das Problem mit Templates und getrennten Übersetzungseinheiten wurde hier auch schon mehrfach erwähnt.



  • Hacker schrieb:

    Semikoli im Header (richtige Plural ?).

    Ich glaube es heißt "Semikola".



  • Lieber Beobachter01. Langsam aber sicher kommt echt Spannung auf meine Hutschnur, soll heißen, kurz vorm reißen. Du möchtest, dass wir dir bei deinen Problemen helfen, gut. Dazu ist das Forum da. Aber wenn du nicht möchtest, dass dich die Leute irgendwann als Troll abstempeln und aufhören, dir zu helfen, dann gib dir bitte ein bisschen Mühe. Zum Einen habe ich dir mehrfach geschrieben, dass du Templates komplett im Header definieren musst. Du warst scheinbar zu faul, das umzusetzen oder hast nicht aufmerksam gelesen, jetzt hast du den Salat. Zum Anderen hatten wir schon beim ersten Problem das Thema mit der vollständigen Fehlermeldung und dem passenden Code. Bei diesem neuen Problem musste dir das wieder mühsam Stück für Stück aus der Nase gezogen werden. Warum? Lies dir bitte den Link in meiner Signatur aufmerksam durch, und dann viel Erfolg bei neuen Fragen, die hoffentlich gleich beantwortbar sind und nicht stundenlanges hin und her benötigen.



  • Außerdem schon WIEDER fehlt ein Semikolon, zieh dir mal Zeile 11 (1 in Datapool.cpp) rein.



  • Ich möchte hier noch jemanden auf die Palme bringen oder jemanden in einem Labyrinth stehen lassen. Sorry dafür! Ich habe versucht die Codeausschnitte zu zeigen weil das gesamte Projekt etwas umfangreicher ist und dachte es genüge was gepostet wurde. Ich werde mir das nächste mal, sehr viel Mühe geben! Versprochen 🙂

    Das mit Templates habe ich schlichtweg überlesen und werde es ausprobieren! Danke nochmals an alle die geantwortet haben.



  • Das kommt mir alles sehr bekannt vor (dein anderer thread).

    Dir fehlt ein Verständnis für wichtige Grundlagen. Die ganzen Compiler- und Linker-Fehlermeldungen sind Beweis dafür. Was Du mindestens recherchieren solltest:
    - translation unit
    - one definition rule

    Steh' Dir doch nicht selbst im Weg.



  • Mir schwant übles. ⚠
    Lernst du von einem Buch, Beobachter ?


  • Mod

    Hacker schrieb:

    Mir schwant übles. ⚠
    Lernst du von einem Buch, Beobachter ?

    Ich wette dagegen.



  • Mmh. Ja, du hast recht. Selbst du-weisst-schon-wers du-weisst-schon-was Leser können was (oder meinst du nicht ? ➡ Oder du hast mich nicht verstanden).



  • Ich lerne aus einem Buch!
    Unzwar:Die C++- Programmiersprache von Bjarne Stroustrup

    Es steht halt nicht alles in diesem Buch, außerdem schaue ich auf der Microsoft-Seite immer nach dem Linker-Fehler. Außerdem ist mir peinlich kein C++- Experte zu sein und sich Foren sucht um vielleicht etwas zu lernen.

    Sorry, dass ich euch mit meinen Fragen belästige wird aber nicht mehr vorkommen!

    Grüße



  • Beobachter01 schrieb:

    Ich lerne aus einem Buch!
    Unzwar:Die C++- Programmiersprache von Bjarne Stroustrup

    Das Buch ist leider kein richtiges Lernbuch, es ist eher eine Zusammenfassung davon, was Struppi sich beim Entwurf der Sprache gedacht hat.

    Beobachter01 schrieb:

    Es steht halt nicht alles in diesem Buch, außerdem schaue ich auf der Microsoft-Seite immer nach dem Linker-Fehler. Außerdem ist mir peinlich kein C++- Experte zu sein und sich Foren sucht um vielleicht etwas zu lernen.

    Mit jedem Fehler, dessen Lösung du findest, wirst du erfahrener. Irgendwann weißt du dann nach wenigen Sekunden automatisch, was nicht stimmt. Das wichtigste ist, insbesondere bei C++: Am Ball bleiben.

    Beobachter01 schrieb:

    Sorry, dass ich euch mit meinen Fragen belästige wird aber nicht mehr vorkommen!

    Es gibt keine blöden Fragen, nur blöde Antworten. Wenn du Fragen hast, dann frag, du solltest nur darauf achten, kurze Codebeispiele sowie die Fehlermeldungen zu posten. Das wichtigste findest du hier: http://www.c-plusplus.net/forum/200753


  • Mod

    Hacker schrieb:

    Mmh. Ja, du hast recht. Selbst du-weisst-schon-wers du-weisst-schon-was Leser können was (oder meinst du nicht ? ➡ Oder du hast mich nicht verstanden).

    Du wolltest darauf hinaus, dass er JW liest, oder? Dazu passt der Stil überhaupt nicht. Templates, Strings, Namespaces, STL-Container, halbwegs nachvollziehbares Design. Das alles gäbe es bei typischen Wolf-Schülern nicht. Dies hier ist quasi ein Edelproblem, Schwierigkeiten die jeder einmal hat, da man einfach nicht von alleine drauf kommt, wie das mit den Templateimplementierungen geht. Dem Threadersteller fehlt bloß die Erfahrung, um die Compiler- und Linkerfehler zu verstehen (und ein bisschen Forennetiquette und die Lesekompetenz für die Antworten die er hier bekommen hat).


Anmelden zum Antworten