no matching function call to



  • Kann eigentlich nicht sein. Was ist denn "tm"?





  • Der Konstruktor von Veranstaltung ruft 20 Standard Konstrukoren von Karten auf. Im Funktionsrumpf erfolgt dann eine Zuweisung.
    Karten braucht also noch einen Standardkonstruktor

    Karten()
    :p_caname(0),p_price(0)
    {}
    


  • so nun ist mein weiteres problem dass wenn ich z.B.

    char*DatumAusgeben()
    

    aufrufe und danach eine andere Funktion aufrufen will stürtzt es ab



  • brotbernd schrieb:

    Karten braucht also noch einen Standardkonstruktor

    Oder du bastelst dir keine hässlichen Workarounds wie Dummy-Standardkonstruktoren und benutzt elegantere Wege. Einer davon wäre für mich std::vector statt eines Arrays, den du sukzessive mit den Karten füllst. Dann musst du dir nämlich auch nicht in einer separaten Variable die Anzahl merken. Eine Einführung in die STL findest du hier.

    Dann könnte die For-Schleife so aussehen:

    for(int i=0; i < AnzKarten; ++i)
    {
        KartenArray.push_back(Karten("Hallo",2.00));
    }
    

    wobei die Deklaration des Containers so aussieht:

    std::vector<Karten> KartenArray;
    

    Ausserdem würde ich anstelle von char* , sprintf() und solchen C-Dingen moderne C++-Mittel wie std::string und std::stringstream einsetzen. Dann hast du mehr Sicherheit, sowohl zur Compile- als auch zur Laufzeit.



  • ist dass die Lösung für mein 2. Problem?



  • Ja, du zerschreibst dir nämlich mit sprintf() den Speicher, da du auf einen uninitialisierten Zeiger zugreifst. Klar, man könnte dafür Speicher anfordern, aber man müsste wieder genau darauf achten, dass genügend vorhanden wäre, damit eventuelle Änderungen an der Klasse nicht plötzlich merkwürdiges Programmverhalten hervorrufen. Ausserdem musst du darauf achten, dass der angeforderte Speicher wieder freigegeben wird. Man muss dem Aufrufer der Funktion kommunizieren, dass er verantwortlich dafür ist, und trotzdem kann es sehr leicht vergessen werden.

    Das sind alles Probleme, welche dir mit std::string nicht passieren können.



  • danke also hab ich einfach nur malloc vergessen?



  • klg71 schrieb:

    danke also hab ich einfach nur malloc vergessen?

    Ja. In C++ aber eher new .

    Aber ich habe dich auf etliche andere Probleme hingewiesen. Wenn dir etwas an modernem C++ und sauberem Design gelegen ist, solltest du die Hinweise vielleicht beherzigen. Wenn du gerne debuggst und dich mit Low-Level-Fehlern rumschlägst, solltest du sie ignorieren.



  • gut ixh werde mir sie annehmen aber es wird bestimmt eine weile dauern bisschen ich den C-Stil wieder weg hab:) 🙂



  • Hm, hast du ein gutes C++-Buch wie den C++-Primer? Dort sollten solche Dinge eigentlich von Anfang an erklärt werden. Auch die STL (Standard Template Library) ist ein sehr wichtiger Bestandteil der C++-Standardbibliothek. In meinem ersten Post habe ich dir dazu einen Link gegeben, der die wichtigsten Dinge erläutert.



  • ja ich hab den link gesehen nein ich habe leider kein buch:D
    alles aus dem inet


Anmelden zum Antworten