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
imoperator+=
umsetzen. Da du den Speicherplatz allerdings bei Bedarf vergrößerst, solltest du hier stattdessen darauf testen ob du mit einem Vergrößern den Wertebereich vonm_maxTips
überschreitest. Bei einemunsigned short
geht dieser von 0 bis 65535, bzw. allgemeiner vonstd::numeric_limits<unsigned short>::min()
bisstd::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üglichm_maxTips
größer oder gleich 12 ist. Nur dann kannst du vergrößern und 12 zum_maxTips
hinzuaddieren, ohne dass diese Variable überläuft.Ich würde zwei frühzeitige
return
empfehlen, eines in der ersten Zeile desoperator+=
, 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 sogarstd::copy
verwenden, bin mir aber unsicher ob das nicht schon zu "modern" für diese Veranstaltung ist - Auch reicht es, im
operator+=()
nur die gesetztenCTip
im Array zu kopieren, also nicht bism_maxTips
, sondern nur bism_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 eventuellenreturn
). Diese Zusicherungen müssen nach jedem Funktionsaufruf wahr sein und solcheassert
s helfen dabei, eventuelle Programmierfehler vorzeitig zu erkennen.
new
unddelete
sind ja leider implizit Teil der Aufgabenstellung, hier einenstd::vector
zu nehmen ist ein Punkt, den nur euer Dozent "besser machen" könnte.
-
ok Danke für die Mühe und tipps Leute