Eclipse Fehlermeldungen



  • @Programmer33 sagte in Eclipse Fehlermeldungen:

    Gerne können Nutzer einen schöneren Weg darstellen wie ich es besser lösen kann ?

    Was lösen? Aufgabenstellung = ?



  • Implementieren Sie den operator+=. Er fügt den als Parameter übergebenen Tipp in das Array m_tips an der nächsten freien Position ein. Falls der Tipp ungültig ist (Prüfung mit der Methode isValid() der Klasse CTip) oder kein Speicherplatz mehr frei ist, bleibt das Objekt unverändert.
    Und dann sollte man es erweitern:Erweitern Sie die Implementierung des operator+= so, dass er das Array vor dem Hinzufügen des Tipps um 12 Element vergrößert, falls kein Speicherplatz mehr vorhanden ist.

    Gerne mit Erklärung helfen



  • Okay, nicht wirklich gut, aber soweit ich das sehe, sollte es so zumindest funktionieren. Bedenke aber, dass ich nur "drübergeschaut" habe. Kompilieren und Testen musst du schon selbst.

    Ich habe auch nochmal über die Aufgabenstellung geschaut: Der Aufgabenteil

    Falls der Tipp ungültig ist (Prüfung mit der Methode isValid() der Klasse CTip) oder kein Speicherplatz mehr frei ist, bleibt das Objekt unverändert.

    ist allerdings noch nicht umgesetzt! Das ließe sich recht einfach mit einem frühzeitigen return im operator+= umsetzen. Da du den Speicherplatz allerdings bei Bedarf vergrößerst, solltest du hier stattdessen darauf testen ob du mit einem Vergrößern den Wertebereich von m_maxTips überschreitest. Bei einem unsigned shortgeht dieser von 0 bis 65535, bzw. allgemeiner von std::numeric_limits<unsigned short>::min() bis std::numeric_limits<unsigned short>::max() (dafür benötigst du ein #include <limits> oben in deiner Quellcodedatei).

    Bevor du vergrößerst, solltest du also testen, ob std::numeric_limits<unsigned short>::max() abzüglich m_maxTips größer oder gleich 12 ist. Nur dann kannst du vergrößern und 12 zu m_maxTips hinzuaddieren, ohne dass diese Variable überläuft.

    Ich würde zwei frühzeitige return empfehlen, eines in der ersten Zeile des operator+=, mit dem geprüft wird, ob der übergebene CTip gültig ist:

    if (/* CTip ist nicht gültig */)
        return *this;
    

    und eines, nachdem du dich entschieden hast, das Array zu vergrößern:

    if( m_countTips == m_maxTips ){
        if (/* Vergrößern führt zu Überlauf von m_maxTips */)
            return *this;
       ...
    

    Das sollte der Aufgabenstellung genügen.

    Bezüglich "besser lösen" habe ich schon jede Menge geschrieben, wofür dir aber scheinbar die Muße fehlte, es selbst umzustetzen:

    • Konsistente Einrückung, Leerzeichen und Leerzeilen.
    • Verwendung von Initialisierungslisten im Konstruktor (falls dir das was sagt).
    • Vermeiden des doppelten Kopierens im operator+=. Vielleicht sogar std::copy verwenden, bin mir aber unsicher ob das nicht schon zu "modern" für diese Veranstaltung ist 😉
    • Auch reicht es, im operator+=() nur die gesetzten CTip im Array zu kopieren, also nicht bis m_maxTips, sondern nur bis m_countTips.
    • Es würde einen guten Eindruck machen, wenn du die im Klassendiagramm angegebenen Zusicherungen als assert-Bedingungen einfügst, direkt am Ende der Funktionen (und vor einem eventuellen return). Diese Zusicherungen müssen nach jedem Funktionsaufruf wahr sein und solche asserts helfen dabei, eventuelle Programmierfehler vorzeitig zu erkennen.

    newund delete sind ja leider implizit Teil der Aufgabenstellung, hier einen std::vector zu nehmen ist ein Punkt, den nur euer Dozent "besser machen" könnte.



  • ok Danke für die Mühe und tipps Leute 😀


Anmelden zum Antworten