Map mit Indexen oder Vectoren mit keys



  • tausend dank fuer die Hilfe (und Geduld)

    upper_bound kannte ich noch nicht, das erleichtert das ganze wesentlich.

    Ich meld mich dann beim naechsten Problem, hehe (irgendwie haben Programme das so an sich, dass man noch soviel drueber nachdenken kann und trotzdem immer unerwartete Probleme auftreten... und sobald man das Problem geloest hat funktionniert eine andere Idee in dem netten Konstrukt wieder nicht...



  • Shinja schrieb:

    upper_bound kannte ich noch nicht, das erleichtert das ganze wesentlich.

    Tja, da gibt es einige hilfreiche Algorithmen in der STL 😉 (da ist die Beschreibung in meinen Artikeln vermutlich etwas kurz gekommen, aber eventuell kannst du dich auf C++ Referenz umsehen, was es noch so nützliches gibt)



  • auf cppreference hatte ich mich umgesehen... nur net unter den Basis algorithmen, ich Depp.

    btw hab ich jetzt das Problem:

    struct voc
    {
     std::string word;
     std::vector<std::string> meanings;
     char diff;
    }
    
    bool operator<(const voc& l,const voc& r)
    {return l.word<r.word;}
    

    nicht funktionnieren will, netterweise mit ner Fehlermeldung, die mir sagt, es sei kein Typenspezifizierer fuer l angegeben...

    also, verstehen tu ichs net, ich denk aber noch drueber nach (mein Internet hier in Japan schaltet sich gleich durch ne hoehere Macht namens "Gastfamilie will schlafen gehen" ab)



  • Da fehlt ein kleines Zeichen: ";" (am Ende von Zeile 6)



  • Ishildur ist bestimmt ein 14 jähriges, CS spielendes Kiddy.



  • 15 schrieb:

    Ishildur ist bestimmt ein 14 jähriges, CS spielendes Kiddy.

    Und was bist du? Ein zehnjähriger Möchtegern-Troll mit schweren Orientierungsstörungen? *scnr*



  • hi cstoll.

    das war ein tppfehler meinserseits, das ; hatte ich schon... nur saudumm, dass ich vielleicht const voc& l und nicht const &voc l schreiben sollte, rofl...

    Naja, morgen in der Schule guck ich mal ob ich mir cppreference nicht ausdrucken kann. Sollte das ganze nochmal wesentlich erleichtern.

    Danke soweit.

    Next Step: get used to Visual 2005 Express... da es ne Win Api werden soll. Bisher hab ich dafuer mit Delphi gearbeitet und auch da nur mit 1 Form, hier brauch ich min 3. Naja, sollte ich es wirklich nicht hinkriegen melde ich mich im WinApi forum

    Vielen Dank

    Shinja



  • So, jetzt habe ich ein ganz anderes Problem (fahre aber trotzdem unter dem thread hier weiter, ok? Oder sollte ich ab jetzt fuer "neue" Probleme auch neue Themen eroeffnen?)

    Also, mein Programm besteht aus:
    vocableconsole.cpp (hier befindet sich die main funktion)
    vocstruct.cpp
    vocstruct.h
    finout.cpp
    finout.h

    So, das ganze laesst ich dann auch schoen kompilieren (Visual C++ Express 2005)... aber wenn ich das Programm nun starte wird es mit nem fehler beendet (keine Fehlermeldung, nur das schoene Fenster mit Problembericht senden von Windows)
    Ok, wollte ich mal mit dem Debugger druebergehen und habe gleich an den Eintrittsspunkt von main nen Breakpoint gesetzt.. tja, und da gibt mir der debugger jetzt nen fehler, dass auf eine unerlaubte Adresse geschrieben werden soll, BEVOR dieser Breakpoint erreicht wird.
    Ein cin.get() direkt am Anfang der main Funktion bestaetigt mir, dass dieser Fehler scheinbar VOR dem Eintritt in die main Funktion geschieht...

    Es ist wohl wie immer ne Dummheit, aber ich habe wirklich keine Ahnung (bisher) woran so etwas liegen koennte...



  • In C++ passiert vor Eintritt in die main-Funktion eine ganze Menge. Hast du zufällig irgendwelch globalen/statischen Variablen?



  • hmm, nein, eigentlich nicht.

    in vocstruct.h befindet sich ein struct und die Koepfe 2er Funtkionen
    in vocstruct.cpp befinden sich diese beiden Funktionen
    in finout.h wieder 2 Funktionskoepfe
    und in finout.cpp halt diese 2 Funktionen
    In vocableconsole.cpp befindet sich dann halt die main Funktion.
    alle cpp dateien mit den noetigen inkludierungen (fuer vocstruct.cpp is es vocstruct.h, iostream, vector und string, fuer finout.cpp fstream, vector, string und vocstruct.h und fuer vocableconsole.cpp iostream, vector, string, vocstruct.h und finout.h)

    Ehm, mir faellt geradeauf: kann ein Fehler daraus entstehen, dass ich finout.h nicht in finout.cpp inkludiere? Man liest immer man soll das "sicherheitshalber" tun...



  • Shinja schrieb:

    Ehm, mir faellt geradeauf: kann ein Fehler daraus entstehen, dass ich finout.h nicht in finout.cpp inkludiere? Man liest immer man soll das "sicherheitshalber" tun...

    Ja, es könnte Probleme geben, wenn die Prototypen im Header nicht mit den zugehörigen Funktionen im CPP zusammenpassen.

    Ansonsten: Kannst du mal dein Programm etwas kürzen (entweder bis der Fehler nicht mehr auftritt oder bis es klein genug ist, um es anderen Usern zuzumuten) und hier vorstellen?



  • Das dumme ist ja, dass es noch nicht sonderlich lang ist...

    Das inzige was ich gerade machen wollte, war die ein-ausgabe testen. Ich habe vor die Vokabeln in 2 Dateien zu speichern, eine fuer fremde Sprache-eigene Sprache und die andere halt umgekehrt. Die Vokabeln sind gespeichter als
    Vokabel D Bedeutung1,Bedeutung2,Bedeutung3,
    (D ist ein Char der die Schwierigkeit angeben wird)
    Die Datei soll durchgelaufen werden bis zum Ende, immer Zeile fuer Zeile eingelesen werden, der String wird verarbeitet und in einer voc-Variable gespeichert, diese wird in nen vector von Vocs gehauen.

    Naja, danach werden mit nem ueberladenen Operator<< die vocs in der Konsole ausgegeben und anschliessend wird das in die files schreiben getestet (also alle vocs in die beiden Dateien schreiben), ende des Programmes.

    Wo koennte der Fehler denn liegen, wenn VOR dem Eintritt in die main funktion ein Fehler auftritt? Dann versuche ich die entsprechenden Stellen schoen zu kuerzen und dann hier reinzustellen.
    Ich habe leider keine Ahnung was vor dem Eintritt in main() alles passiert...

    Vielen Dank,

    Shinja

    PS: sehr nette Community hier, mit sehr viel geduld. freut mich!



  • Wo koennte der Fehler denn liegen, wenn VOR dem Eintritt in die main funktion ein Fehler auftritt?

    Naja, alles was statisch initialisiert wird, also wenn du Klassen hast die irgendwo statisch instanziert werden, dann check mal deren Konstruktoren.



  • Klassen habe ich aktuell keine (siehe oben, mehr als die paar Funtkionen und das struct hab ich net)
    Verstaendnisfrage: wenn ich net static... hinschreibe wird nichts static, oder? Das hab ich naemlich nirgends verwendet.



  • Fast - auch globale Objekte (also alles, was du außerhalb der main() angelegt hast) werden statisch initialisiert, bevor das Programm richtig startet.



  • Hmm, ich bau einfach mal die Dateienumrisse hier zusammen. (einfaches copy paste geht gerade nicht, das Programm ist auf meinem Labtop, aber der PC meiner Gastfamilia ist gerade am Internet angeschlossen und soll das auch bleiben...)

    vocstruct.h

    struct voc
    {
     std::string word;
     std::vector<std::string> meanings;
     char diff;
    };
    
    bool operator<(const voc &l,const voc &r);
    std::ostream &operator<<(std::ostream &out,const voc &v);
    

    vocstruct.cpp

    #include <vector>
    #include <string>
    #include <iostream>
    #include "vocstruct.h"
    
    bool operator<(const voc &l,const voc &r)
    {
    ...
    }
    
    std::ostream &operator<<(std::ostream &out,const voc &v)
    {
    ...
    }
    

    finout.h

    void fin(std::vector<voc> &flol,std::vector<voc> &olfl); //Foreign Language to Own Language und umgekehrt
    void fout(const std::vector<voc> &flol,const std::vector<voc> &olfl);
    

    finout.cpp

    #include <vector>
    #include <string>
    #include <fstream>
    #include "vocstruct.h"
    
    void fin(std::vector<voc> &flol,std::vector<voc> &olfl)
    {
    ...
    ...
    }
    
    void fout(const std::vector<voc> &flol,const std::vector<voc> &olfl)
    {
    ...
    ...
    }
    

    vocabeltrainer.cpp

    #include <vector>
    #include <string>
    #include <iostream>
    #include "vocstruct.h"
    #include "finout.h"
    
    int main()
    {
    ...
    }
    

    Sollten die Inhalte der Funktionen fuer dieses Problem relevant sein sagt bitte bescheid.



  • Erstmal solltest du die für die Strukturdeklaration benötigten STL-header direkt in deine Header einbinden, anstatt dich darauf zu verlassen, daß sie immer vor dem #include eingebunden wurden (außerdem steht die std::ostream im Header <ostream>).



  • Ok, habs geaendert, danke

    Der Fehler kommt aber immernoch
    "This application has requested the runtime to terminate it in an unusual way. Please contact the application`s support team for more information"

    EDIT: resp. mit debugger:
    "Unbehandelte Ausnahme bei 0x7c812a5b in vocabeltrainerconsole.exe:
    Microsoft C++ Ausnahme std::out-of-range an Speicherposition 0x0012fcc4"

    "Unbehandelte Ausnahme bei 0x00407d87 in vocabletrainer.exe:
    0xC000005: Zugriffsverletzung beim Schreiben an Position 0x0000000"

    usw.



  • Das Problem hat ich geloest, auch wenn ich nicht ganz verstehe wie...

    Vielen Dank fuer die Hilfe, jetzt funzt mal das aus File einlesen, in std I/O ausgeben, und wieder in File reinschreiben.

    Jetzt fehlt eigentlich nur noch... ehm... naja, der ganze rest, hehe.


Anmelden zum Antworten