Fehler sammeln-Struktur,Array oder Liste?



  • 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... 🙄



  • HalliHallo schrieb:

    var = new int [x];
    

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

    var = new int [x];
    

    Ab dieser Zeile steht fest wie groß das Array ist und es ist ab dem Zeitpunkt deswegen NICHT MEHR dynamisch.
    Dynamische Arrays oder die anderen STL-Container können auch noch nach ihrer Definition "wachsen", Dein statisches Array nicht!



  • Tja ... nun hat mir die Antwort schon jemand vorweggenommen ... aber genau so ist es: In Deinem Beispiel wird die Größe einmal festgelegt und nicht mehr verändert, ich sehe da keine Dynamik.
    Und wenn da jemand sich die Mühe machen würde, sie fehleranfällig, wie so was nun mal ist, einzubauen, würde ich mich fragen, warum man da nicht einen fertigen Container aus der STL nimmt ...

    Aber ich glaube, Du bist schon viel zu klug, als dass wir Blödmänner aus diesem Forum hier Dir noch gute Tipps geben können, deshalb lass ich das jetzt mal sein ...


Anmelden zum Antworten