Fehler sammeln-Struktur,Array oder Liste?



  • Hi,
    ich habe folgendes Problem:

    ich habe eine funktion:

    void beispiel_fkt()
    {
     do
     {
       //hier ist eine 2. Funktion zum löschen...
       entfernen_status=entfernen(agr1, arg2);
    
       if(entfernen_status>0)
       {
         //Fehler beim entfernen...
         //hier müssze ich den Fehler jetzt "merken" entweder in Liste,Array oder  
         //Struktur-Array  :D  oder vielleicht gibt es auch alternativen?
       }
    
     }while(x=1)
    }
    

    weil ich vorher nicht weiß wie viele Fehler dort auftreten können kann ich ja nicht einfach ein array oder struktur array fester größe nehmen...
    kann mir jemand bitte mal nen kleinen denk anstoß geben, wie kann ich dort jetzt am günstigsten die auftretenden Fehler "sammeln" ?
    😃



  • Was soll ein Strukturarray sein?

    Ansonsten: std::vector



  • Hi,

    mir ist nicht ganz klar was du genau machen möchtest.

    Wieso willst du denn Fehler sammeln?
    Normalerweise behandelt man Fehler, wenn sie auftreten oder geht es um eine Logfile Klasse die die Fehler rausschreiben soll?



  • manni66 schrieb:

    Was soll ein Strukturarray sein?

    Ansonsten: std::vector

    man kann eine struktur bauen und von dieser ein array anlegen -> strukturarray... kann sein das das nicht der richtige fachbegriff ist... 🙄
    ich mein damit sowas:

    struct xyz{
    int x;
    int y;
    char z;
    }XYZ[100];
    

    mit vektoren schaue ich nochmal, aber wäre das nicht soetwas wie ein dynamisches array? 🙂

    verwirrt schrieb:

    Hi,

    mir ist nicht ganz klar was du genau machen möchtest.

    Wieso willst du denn Fehler sammeln?
    Normalerweise behandelt man Fehler, wenn sie auftreten oder geht es um eine Logfile Klasse die die Fehler rausschreiben soll?

    so ungefähr wie eine logfile-klasse die die fehler rausschreiben soll ja 🙂 ...

    die "entfernen()" funktion gibt mir 0 oder 1 zurück...
    daran will ich entscheiden ob ein fehler aufgetreten ist oder nicht...
    aber dies dann in der datei_entfernen() funktion... (wie im beispiel in der if-Abfrage) ... falls ein fehler auftritt will ich diesen dann in das z.B. dynamische array schreiben und wenn die schleife fertig ist alles ausgeben... falls fehler aufgetreten sind...

    mein problem ist jetzt ich weiß nicht sorichtig wie ich das lösen kann da ich nicht genau weiß ob ein dynamisches array hier das richtige wäre...
    ich kann aber nichts festsetzen da ich vorher nicht genau weiß wie viele fehlöer es geben kann... gibt es da elegantere lösungen als dynamisches array?



  • edit :
    eig will ich einfach gesagt entfernen() in der schleife ausführen nur die parameter ändern, pro durchlauf... falls ein fehler auftritt dies erkennen, parameter speicheren (hier kommt nun das "dynamische Array" oder Alternativen?-> das ist mein Problem 🙂 ) und diese dann nach beenden der schleife "gesammelt" ausgeben...

    da ich aber nicht weiß wie viele fehler auftreten können, bevor ich die fehler feststelle, weiß ich nun nicht genau wie ich soetwas löse...
    spontan fällt mir da ein:

    - dynamisches Array
    - dynamisches Strukturarray
    - Listen

    nun meine Frage war: gibt es da vielleicht elegantere lösungen ? oder "bessere" alternativen? oder macht man soetwas normalerweise einfach mit dynamischen arrays? 😕



  • Oder Du sammelst die Ausgaben in einem ostringstream! Dann kannste die Fehler nämlich gleich so "anzeigen", wie Du sie anzeigen willst. 😃



  • Wie schon gesagt wurde:
    std::vector



  • volkard schrieb:

    Oder Du sammelst die Ausgaben in einem ostringstream! Dann kannste die Fehler nämlich gleich so "anzeigen", wie Du sie anzeigen willst. 😃

    gute idee... ich benötige aber eine tabellen-artige struktur...

    Belli schrieb:

    Wie schon gesagt wurde:
    std::vector

    jop ich glaube ich mach es auch mit vector 😉 ...

    danke erstmal für alle tipps/hilfen/anworten 🙂



  • ich hab eben das gefunden...
    sieht eig auch nicht schlecht aus..

    int *var = 0;     
    var = new int [6]; 
    for (i=0; i<6; i++)  
    {
         std::cout << var [i] << std::endl;
    }
    delete[] var ;      
    var = 0;
    

    dynamische größe des arrays... 😃
    was sagt ihr dazu? ist das einem vektor zubevorzugen oder lieber vektor ? 🙂



  • So wie das da steht, ist das ein Array mit 6 Einträgen ... was ist daran dynamisch?

    Aber weißt Du was? Mach es, wie Du willst ...



  • Vektor macht intern nichts anderes. Nur dass vector Dir eben noch jede Menge zusätzliche Funktionalität mitbietet: Du kannst die Größe ändern, einfach mit push_back anhängen und er wächst selber mit, Du kannst die aktuelle Größe jederzeit rausfinden und das aller aller wichtigste: Es kann Dir nicht passieren, dass Du ein "delete []" vergisst und Du dadurch ein Speicherloch hast, oder aus Versehen irgendwo "delete" ohne "[]" schreibst und das zu einem segfault führt. Und genau deswegen ist vector in ca. 100% der Fälle zu bevorzugen.



  • HalliHallo schrieb:

    was sagt ihr dazu? ist das einem vektor zubevorzugen... ? 🙂

    NEIIIIIHHHHHN!



  • Belli schrieb:

    So wie das da steht, ist das ein Array mit 6 Einträgen ... was ist daran dynamisch?

    Aber weißt Du was? Mach es, wie Du willst ...

    ähhhmmm... nein ist dynamisch ... google mal dynamisches array 😉 ...
    ja mach ich eh, nur ich weiß ja nicht wie ich es will 😃 ... sinnlose antwort aber trozdem danke 😉 ...

    Jester schrieb:

    Vektor macht intern nichts anderes. Nur dass vector Dir eben noch jede Menge zusätzliche Funktionalität mitbietet: Du kannst die Größe ändern, einfach mit push_back anhängen und er wächst selber mit, Du kannst die aktuelle Größe jederzeit rausfinden und das aller aller wichtigste: Es kann Dir nicht passieren, dass Du ein "delete []" vergisst und Du dadurch ein Speicherloch hast, oder aus Versehen irgendwo "delete" ohne "[]" schreibst und das zu einem segfault führt. Und genau deswegen ist vector in ca. 100% der Fälle zu bevorzugen.

    vielen dank 😃
    danke für deine fachlich bezogene und erklärende antwort... das war genau das was ich erfragen wollte 🙂 ...
    jop ok, dann nutze ich lieber vector... 😃 ist ja auch logisch...
    jop mit "new" und "delete" ist immer sone sache 🙄 ...

    vielen dank für alle antworten die eine entsprechende konsitenz und einen der fragestellung angemessenen informationsgehalt hatten ... 😉



  • HalliHallo schrieb:

    manni66 schrieb:

    Was soll ein Strukturarray sein?

    Ansonsten: std::vector

    man kann eine struktur bauen und von dieser ein array anlegen -> strukturarray... kann sein das das nicht der richtige fachbegriff ist... 🙄

    Ja, man zu einem Datentyp ein Array bauen. Was soll besonderes an einer Struktur sein, dass man dazu einen Namen erfinden sollte?



  • manni66 schrieb:

    HalliHallo schrieb:

    manni66 schrieb:

    Was soll ein Strukturarray sein?

    Ansonsten: std::vector

    man kann eine struktur bauen und von dieser ein array anlegen -> strukturarray... kann sein das das nicht der richtige fachbegriff ist... 🙄

    Ja, man zu einem Datentyp ein Array bauen. Was soll besonderes an einer Struktur sein, dass man dazu einen Namen erfinden sollte?

    struktur = eigener datentyp ? 😉

    -> c++ grundlagen

    trozdem ist das dann ein strukturarray... 😉
    int x[100] -> int array 😃



  • HalliHallo schrieb:

    manni66 schrieb:

    HalliHallo schrieb:

    manni66 schrieb:

    Was soll ein Strukturarray sein?

    Ansonsten: std::vector

    man kann eine struktur bauen und von dieser ein array anlegen -> strukturarray... kann sein das das nicht der richtige fachbegriff ist... 🙄

    Ja, man zu einem Datentyp ein Array bauen. Was soll besonderes an einer Struktur sein, dass man dazu einen Namen erfinden sollte?

    struktur = eigener datentyp ? 😉

    -> c++ grundlagen

    eigener Datentype == C++

    -> c++ grundlagen



  • manni66 schrieb:

    HalliHallo schrieb:

    manni66 schrieb:

    HalliHallo schrieb:

    manni66 schrieb:

    Was soll ein Strukturarray sein?

    Ansonsten: std::vector

    man kann eine struktur bauen und von dieser ein array anlegen -> strukturarray... kann sein das das nicht der richtige fachbegriff ist... 🙄

    Ja, man zu einem Datentyp ein Array bauen. Was soll besonderes an einer Struktur sein, dass man dazu einen Namen erfinden sollte?

    struktur = eigener datentyp ? 😉

    -> c++ grundlagen

    eigener Datentype == C++

    -> c++ grundlagen

    c++ entspricht einem eigenen datentyp?
    ich glaube nicht...

    eine struktur ist ein eigener datentyp und die "vorstufe" oder eine "vereinfachte" klasse...
    was du mit eigner datentyp == c++ aussagen willst weiß ich nicht?
    und was dies zur lösung des problems beiträgt weiß ich auch nicht, vll kannst du es mir erklären? :p

    ps. datentyp wird ohne (e) geschrieben 😉



  • HalliHallo schrieb:

    Belli schrieb:

    So wie das da steht, ist das ein Array mit 6 Einträgen ... was ist daran dynamisch?

    Aber weißt Du was? Mach es, wie Du willst ...

    ähhhmmm... nein ist dynamisch ...

    Zeig mir doch bitte an dem von Dir geposteten Beispiel die Stelle, die es dynamisch macht.
    Danke.



  • Belli schrieb:

    HalliHallo schrieb:

    Belli schrieb:

    So wie das da steht, ist das ein Array mit 6 Einträgen ... was ist daran dynamisch?

    Aber weißt Du was? Mach es, wie Du willst ...

    ähhhmmm... nein ist dynamisch ...

    Zeig mir doch bitte an dem von Dir geposteten Beispiel die Stelle, die es dynamisch macht.
    Danke.

    warum stellst du mich in frage ohne vorher selbst mal zu googeln?
    ich will bitte kein flame-wars hier starten...!!
    aber jop ich erkläre es...
    dann erklärst du mir auch bitte warum es nicht dynamisch sein sollte? 😃 (nach deiner Meinung)

    das ist ein dynamisches array nicht derselben meinung? 😃
    hier ist auch die quelle:
    http://www.willemer.de/informatik/cpp/dynamic.htm

    hier nochmal das beispiel:

    int *var = 0;    
    var = new int [6];
    for (i=0; i<6; i++)  
    {
         std::cout << var [i] << std::endl;
    }
    delete[] var ;      
    var = 0;
    

    erklärung:

    - mit "new" -> dynamischer Speicherbereich -> Größe des Arrays als Parameter
    - in einigen fällen weiß das Programm erst nach dem Start wie groß das Array sein muss
    -durch dynamische arrays wird nur dieser "benötigte" Speicher verwendet

    - um ein array während der laufzeit zu erzeugen mit new + typ + anzahl der elemente...
    -> hier wäre dynamik ich kann auch anstatt [6], schreiben:

    var = new int [x];
    

    und jetzt du ... warum ist es nicht dynamisch? 🙄



  • edit:

    @ Belli

    std::vector -> macht soetwas nur intern... oder was meinst du wie das sonst funktioniert? wahrscheinlich ein fall der allseits bekannten code-magie, wahrscheinlich zaubert mir der vektor allozierte speicherbereiche und gibt diese später wieder frei... 😃 *hex hex* 😃 😃 😃

    da der programmierer nicht unbedingt mit "new" und "delete" hantieren möchte bzw. versucht wird in c++ allozierung von speicherbereichen und dessen wieder freigeben weitestgehen zu automatisieren... -> vector!
    (im gegensatz zu C)
    um daraus folgende fehler zu vermeiden... 🙄


Anmelden zum Antworten