N'Abend!
Wenn ich eine Zahl aus einem int auf der Konsole ausgeben möchte (egal, ob std::cout oder qDebug()), dann wird immer nur ein zweizeiliger Kasten mit z.B. 0003 ausgegeben. Wenn die Zahl direkt eingegeben wird und nicht aus einer Variable stammt, wird sie korrekt ausgegeben.
Was mache ich falsch?
Gruß
Michael
Zahlen werden auf Konsole nicht korrekt dargestellt
Hmmm...
Irgendwie scheint das ein Nebeneffekt meiner Loggerklasse zu sein, an der ich gerade bastel. Ich finde den Fehler aber leider nicht.
Was auch seltsam ist: Mit GUI kann ich den Logger benutzen, ohne nicht. o_O
Seht ihr mehr?
Quelltext ist im Anhang.
Gruß
pinki
Irgendwie scheint das ein Nebeneffekt meiner Loggerklasse zu sein, an der ich gerade bastel. Ich finde den Fehler aber leider nicht.
Was auch seltsam ist: Mit GUI kann ich den Logger benutzen, ohne nicht. o_O
Seht ihr mehr?
Quelltext ist im Anhang.
Gruß
pinki
- Dateianhänge
-
- testApplikation.tar.gz
- Logger mit Beispiel
- (2.37 KiB) 131-mal heruntergeladen
Warum müssen immer alle C++ wie Java programmieren...
Man kommt sehr gut ohne Zeiger und new aus. Ich hab jetzt nur das geändert, und schon krieg ich keine SegFaults mehr...
Mach mal so weiter, und schau obs besser wird. Ich kann mir vorstellen, dass du irgendwas böses mit deinem Speicher getrieben hast, ich geh dem aber nimmer nach, da die ganzen Zeiger eh raus müssen.
Man kommt sehr gut ohne Zeiger und new aus. Ich hab jetzt nur das geändert, und schon krieg ich keine SegFaults mehr...
Code: Alles auswählen
class Logger : public QObject{
private:
static Logger *instance;
int debugLevel;
QFile logFile;
QDateTime zeit;
QDate lastLog;
Logger(int = 0);
public:
static Logger* getInstance();
void log(QString, int);
char getDebugLevel();
void setDebugLevel(int);
};
Code: Alles auswählen
Logger::Logger(int debugLvl)
: debugLevel(debugLvl),
logFile("log/" + QDate::currentDate().toString("dd-MM-yyyy") + ".log"),
lastLog(QDate::currentDate())
{
}
Erm...
Schau dir die Markierte Zeile an. lastLog ist UNINITIALISIERT! Du weist diesem unintialisierten Speicherbereich nun etwas zu. Das geht sowas von in die Hose! lastLog zeigt irgendwo hin. Wenn du dann dort einfach Speicher überschreibst mit deiner Zuweisung, kann alles passieren. Undefiniertes Verhalten. Sogar dein Rechner kann implodieren
Darum: Lass die Zeiger bleiben, wenn du sie nicht wirklich brauchst!
Code: Alles auswählen
Logger::Logger(int debugLvl = 0){
this->debugLevel = debugLvl;
this->zeit = new QDateTime();
*this->lastLog = zeit->date().currentDate(); /// 111!!!11!!! BÖSE!
this->logFile = new QFile("log/" + zeit->date().currentDate().toString("dd-MM-yyyy") + ".log");
}
Darum: Lass die Zeiger bleiben, wenn du sie nicht wirklich brauchst!
Moin moin!
Danke für die schnellen Antworten.
Die Umstellung geht bei mir da noch nicht so leicht von der Hand. ^^
Ich habe das jetzt - mit Ausnahme von instance - wie vorgeschlagen zeigerlos gemacht.
Den Konstruktor habe ich auch übernommen. Danke noch mal.
Die uninitialisierte Stelle war mir gar nicht aufgefallen. *mir vor den Kopf klatsch*
Die SegFaults sind jetzt weg, das Problem mit der Konsole habe ich aber leider immer noch.
Hab viel rumprobiert und letztenendes sogar Qt noch mal in der neusten Version heruntergeladen und kompiliert. Gebracht hat auch das nichts.
Im Anhang ist nun die überarbeitete Version.
Gruß
Michael
Edit: Och nöööö! Wie dumm! Die arg-Methode von QString sollte ich vielleicht auch beachten. Ihr dürft mich nun steinigen. ^^
Danke für die schnellen Antworten.
Das kommt davon, wenn man vorher nur C++ gemacht hat und nun im Studium nur Java.franzf hat geschrieben:Warum müssen immer alle C++ wie Java programmieren...
Die Umstellung geht bei mir da noch nicht so leicht von der Hand. ^^
Ich habe das jetzt - mit Ausnahme von instance - wie vorgeschlagen zeigerlos gemacht.
Den Konstruktor habe ich auch übernommen. Danke noch mal.
Die uninitialisierte Stelle war mir gar nicht aufgefallen. *mir vor den Kopf klatsch*
Die SegFaults sind jetzt weg, das Problem mit der Konsole habe ich aber leider immer noch.
Hab viel rumprobiert und letztenendes sogar Qt noch mal in der neusten Version heruntergeladen und kompiliert. Gebracht hat auch das nichts.
Im Anhang ist nun die überarbeitete Version.
Gruß
Michael
Edit: Och nöööö! Wie dumm! Die arg-Methode von QString sollte ich vielleicht auch beachten. Ihr dürft mich nun steinigen. ^^
- Dateianhänge
-
- testApplikation2.tar.gz
- überarbeitete Loggerversion
- (2.36 KiB) 155-mal heruntergeladen