031
16.11.2016, 14:24 Uhr
Joe1903
|
Zitat von ao: |
Einiges. Zuerst mal muss in Zeile 3 hinter class X das Semikolon weg. Wenn du das gemacht hast,werden die Fehlermeldungen aussagekräftiger.
Als nächstes überleg dir nochmal, was das "const" am Ende einer Klassenmethode für die Member der Klasse bedeutet und was du innerhalb von operator char *() mit cx und buffer machst.
Der Test von cx auf >= 0 in main ist Blödsinn. Ich verstehe, was das soll, aber so kann man das nicht machen. Selbst wenn es syntaktisch richtig wäre, es ist semantisch (d.h. im Bedeutungskontext) falsch. Man kann nicht ein Objekt in ein anderes umwandeln und den Erfolg dieser Aktion im Quellobjekt speichern und den Anwender zwingen, das vor der Verwendung des Ergebnisses nochmal abzufragen. Das ist so umständlich, dass es die Entscheidung, eine Operator-Form zu wählen, ad absurdum führt.
Operatoren sind dann brauchbar, wenn sie sicher ein Ergebnis liefern können, das man blind verwenden kann, Beispiel: Addition. Wenn bei der Operation was schiefgehen kann, wird es umständlich. Der Operator kann dann den Fehler entweder im Ergebnis anzeigen (z.B. indem er "value too long" reinschreibt) oder er kann eine Exception werfen.
Wenn das alles nicht geht, dann ist der Operator nicht das Mittel der Wahl, dann macht man besser eine Funktion, die einen Fehlercode retourniert und das eigentliche Ergebnis über pass-by-reference rein- und rausreicht. Aber die Option hast du hier nicht. Für das, was hier gefragt ist (Trace-Operator) würde ich einfach "value too long" oder irgendwas ähnliches in den Puffer schreiben, wenn snprintf anzeigt, dass der Platz nicht gereicht hat.
Lies nochmal in der Doku zu snprintf nach, wie die Funktion das genau anzeigt. Deine Auswertung ist nicht richtig.
|
Kannst du mir bitte ein Code Snippet aufzeigen?Ich bin kein C++-ler und lerne am Besten wenn ich etwas sehe.Dann schreib ich es um und poste es hier rein (mit einem anderen Data member z.B.) Mir gehts wirklich nicht um outsourcen oder dergleichen. |