C++ Wav-Datei Samples addieren



  • Dieser Beitrag wurde gelöscht!


  • @Belli Danke für dein Verbesserungsvorschlag. Um ehrlich zu sein habe ich selber wenig Ahnung vom Code. Ich weis zwar was die Methoden bzw. die Befehle machen, aber mir fehlen dennoch die Befehle um meine Wav auszulesen und es in mein Array zu packen.



  • Das war ein Hinweis, dass der Code keinen Sinn macht. Anscheinend nicht offensichtlich genug.



  • @Mechanics Jetzt schon, wenn man es DIREKT sagt. Nur zu schreiben, dass der Code kein Sinn ergibt macht, mich auch nicht weiter. Ich habe auch geschrieben, dass ich nicht weis ob es Sinn ergibt. Bin erst seit kurzem in C++ und die ganzen Dinge sind mir eben neu.



  • Was hast du von dem Code überhaupt selbst geschrieben, was war vorgegeben?
    Was verstehst du, und wo hast du Schwierigkeiten?



  • @Mechanics Die Container Klasse war eigentlich so gut wie vorgeben bzw. der Prof. hat er in der Vorlesung so uns gezeigt. Ich habe nur eben ein Template erstellt und die Main habe ich mit einem Freund geschrieben.

    In der Container Klasse habe ich Kleinigkeiten geändert, wie z.B. formalen Parameter.



  • Hab mir schon gedacht, dass die Container-Klasse ursprünglich mal für double geschrieben war, und Du die nun auf Template umstellen willst/sollst - daher auch die Reste mit dem Typ double.

    Mach doch zuerst mal die Containerklasse fertig, so dass die funktioniert, eins nach dem anderen ...



  • @Belli sagte in C++ Wav-Datei Samples addieren:

    Hab mir schon gedacht, dass die Container-Klasse ursprünglich mal für double geschrieben war

    Nicht nur das... Die Codezeile macht so oder so keinen Sinn.

    Das ist eine ganz grundlegende Frage. Was macht new double[x]?



  • @Berkan046 sagte in C++ Wav-Datei Samples addieren:

    @Mechanics Jetzt schon, wenn man es DIREKT sagt. Nur zu schreiben, dass der Code kein Sinn ergibt macht, mich auch nicht weiter.

    Wenn du versuchst zu erklären was eine sinnlose/falsche Codezeile macht, dann kann u.A. folgendes passieren:

    1. Du erklärst was du meinst dass die Codezeile bewirkt - und deine Vorstellung ist falsch. In dem Fall können wir diesen Irrtum aufklären und dir sagen was die Codezeile wirklich macht. Das hilft dir dann weiter.
    2. Du kommst selbst drauf dass die Codezeile keinen Sinn macht. Das hilft dir auch weiter.

    Was dir aber nicht hilft ist dich aufzuregen wenn dir jemand sowas schreibt. Damit machst du dich bloss unbeliebt.



  • @Mechanics sagte in C++ Wav-Datei Samples addieren:

    new double[x]

    hab mir eben den Quellcode von meinem Prof. angeschaut und bemerkt, dass ich wahrscheinlich beim probieren bzw. umstellen einen Fehler gemacht habe.

    Es hätte so sein müssen:

    if(value != NULL && newValue != NULL)
    

    bzw.

    if(myArray != NULL && newArray != NULL)
    


  • @hustbaer Ich gebe dir vollkommen Recht. Nur macht es ebenso wenig Sinn zu sagen das es falsch ist, statt kurz und knapp zu sagen was falsch ist. Und wenn alles nicht stimmt, dann kann man das auch direkt sagen finde ich.



  • Ich weiß ja nicht, was Du studierst, aber wenn Du programmieren lernen willst, wäre es schon gut, wenn Du verstehen würdest, warum

    if(myArray != NULL && new double[size]){
    

    grob falsch ist.



  • @Belli Eigentlich wird doch nur überprüft ob mein Array leer ist bzw. kein Inhalt hat oder nicht? Und wenn es nicht der Fall ist dann wird der darauf folgende Code ausgeführt. Im ersten Semester hatte ich gar keine Probleme mit Java, aber C++ ist (für mich zumindest) sehr schwierig bzw. kompliziert, weil C++ neue Sachen mit sich bringt wie union, struct, pointer etc.



  • @Berkan046
    new ... besorgt Dir Speicher auf dem Heap und gibt Dir einen Zeiger darauf zurück.
    In Deiner if - Abfrage machst Du nichts damit, der Speicher wird für Dich reserviert, aber Du speicherst den Zeiger, den Dir new zurück gibt, nicht.
    Du hast also keinen Zugriff mehr auf diesen Speicher, er ist für Dein Programm verloren, insbesondere kannst Du ihn nicht mehr freigeben.
    Und das passiert jedes Mal, wenn Dein Container mehr Speicher benötigt.



  • @Belli Ok danke das du es erklärst. Soweit ich bisher es gelesen habe, meintest du, dass mein double myArray unnötig ist. Müsste ich statt double mein Template T verwenden? Und bei der If-Abfrage wäre es ja sinnvoll nur abzufragen, ob mein myArray == NULL ist oder nicht?



  • Beides ja.
    Warum mySize vom Typ T ist erschließt sich mir nicht.



  • Jo, siehe vorletzter Satz in Aufgabe 1:
    'Das Array soll vom Template Datentyp sein, also beliebige Datentypen fassen können.'
    Aktuell fasst Dein 'Array' Zeiger auf double ...
    Und wie Swordfish schon angemerkt hat: Deine Variable mySize, und alles was mit size zu tun hat, soll ja sicher speichern, für wieviel Einträge Du Speicher beschafft hast/beschaffen willst. Da ist der Datentyp T fehl am Platze.



  • @Berkan046 sagte in C++ Wav-Datei Samples addieren:

    @hustbaer Ich gebe dir vollkommen Recht. Nur macht es ebenso wenig Sinn zu sagen das es falsch ist, statt kurz und knapp zu sagen was falsch ist. Und wenn alles nicht stimmt, dann kann man das auch direkt sagen finde ich.

    Es geht darum dass du verstehen musst was der Code macht den du schreibst. Du musst zumindest eine Vorstellung davon haben was du damit bezwecken möchtest wenn du sowas wie if (ptr != NULL && new double[size])schreibst.
    Wenn du eine Vorstellung davon hast, dann kannst du diese erklären und wir können dich ggf. korrigieren.
    Und wenn du einfach etwas hinschreibst ohne eine Vorstellung davon zu haben was du damit erreichen willst, dann ist genau das das Problem. So kann man nicht programmieren.

    Auch macht der && new double[size] Teil sowas von überhaupt keinen Sinn, dass es gut wäre zu wissen warum du es geschrieben hast. Denn irgendwas hast du dir ja dabei gedacht. Das weist auf ein recht grundlegendes Misverständnis hin. Und dieses zu korrigieren wäre denke ich wichtig.

    Immer gleich zu schreiben was falsch ist, ist mMn. gerade nicht der beste Weg jemandem das Programmieren beizubringen.



  • @Belli danke dir. Mittlerweile merke ich, dass ich den Code hätte schicken sollen, bevor ich verzweifelt war und nach Lust und Laune es geändert habe.



  • @hustbaer Ja wie gesagt ich geben dir 100% Recht, aber ich bin gerade so verzweifelt, dass ich fast gar nichts mehr verstehe. Mein Code wurde erst im nachhinein so "beschissen", nachdem ich versucht habe die wave-Datei irgendwie in mein Array zu speichern und dabei vieles rumprobiert habe. Ich werde jetzt erstmal alles wieder "korrigieren".
    Aber ich danke dir vielmals 😊.


Anmelden zum Antworten