char wird automatisch in int umgewandelt :(
-
hi ich hab ne kleine Header-Datei geschrieben, die als Logdatei fungieren soll, funktioniert auch alles, bis auf die beiden Variablen el (endline) und tab (tabulator).
der Header:
#ifndef __LOGFILE__ #define __LOGFILE__ #include <fstream> using namespace std; namespace logfile { const char tab = '\t'; const char el = '\n'; class Logfile { public: Logfile(char* fname) : name(fname) {f.open(name, ios::out);} ~Logfile() {f.close();} void write(char* str){f<<str<<' ';} void write(int i){f<<i<<' ';} Logfile& operator<<(char* str){write(str); return *this;} Logfile& operator<<(int i){write(i); return *this;} private: Logfile(const Logfile&); const char* name; fstream f; }; } #endifdie main:
#include <logfile.h> using namespace logfile; int main() { Logfile log("log.txt"); log<<"test"; log<<1<<"zahl"<<el; log<<"tab"<<tab<<"test"; return 0; }und die log.txt:
test 1 zahl 10 tab 9 testmich nervt das grad übelst, weil ich nicht weiß, wie ich verhindern kann, dass diese beiden chars in ints umgewandelt werden. ich hab schon rumprobiert:
test ohne andere Wirkung:
Logfile& operator<<(char str){write(str); return *this;}die Zeile hab ich noch hinzugefügt, allerdings bleibt alles beim alten.
Danke im voraus für die Rückmeldung!
-
Wenn sie nicht in int umgewandelt werden, wie willst du sie dann ausgeben, wenn du nur int und char* (der übrigens wohl const char* sein sollte) anbietest?
test ohne andere Wirkung:
Logfile& operator<<(char str){write(str); return *this;}Code:
die Zeile hab ich noch hinzugefügt, allerdings bleibt alles beim alten.
Das verschiebt die gleiche Problematik hin zu deiner write-Funktion.
-
ja hab ich auch grad gesehen, ich hätte 2 Zeilen dazumachen müssen:
Logfile& operator<<(const char str){write(str); return *this;}und
void write(const char str){f<<str<<' ';}danke für das mit dem const, hab ich vergessen

-
funktioniert jetzt. danke!

hab auch noch den Code verändert, um minimale Nebenwirkungen zu entfernen:vorher:
void write(const char str){f<<str<<' ';}da kam dann raus:
test 1 zahl tab testjetzt:
void write(const char str){f<<str;}da kommt jetzt raus:
test 1 zahl tab testDanke für die Hilfe!

-
Clundsch schrieb:
ja hab ich auch grad gesehen, ich hätte 2 Zeilen dazumachen müssen:
Logfile& operator<<(const char str){write(str); return *this;}und
void write(const char str){f<<str<<' ';}danke für das mit dem const, hab ich vergessen

Das const so wie hier hingegen ist verwirrend und unüblich. Wen interessieren deine Implementierungsdetails (ob du das str selber veränderst oder nicht) im öffentlichen Interface? Interessant ist doch bei Pointer- und Referenztypen, ob du das dahinter stehende Objekt veränderst.
-
naja, eig. nicht... was wäre denn deiner Meinung nach richtig? (das hier ist bereits die fertige Headerdatei)
-
Logfile& operator<<(const char* str){write(str); return *this;} Logfile& operator<<(int i){write(i); return *this;} Logfile& operator<<(char i){write(i); return *this;}Bitte nachvollziehen, auf was sich die const-ness hier bezieht!
-
scheint so, als würde das const sich hier lediglich auf den Zeiger beziehen, damit der eigentliche Wert nicht verändert werden kann. Da die anderen beiden Parameter keine Zeiger sind isses da egal... wenns das ist hab ichs verstanden, danke!