"Erst googlen, dann fragen" :) aber... mit welchem Schlagwort werde ich bei Google fündig, wenn ich wissen möchte wie ich eine C++ Methode schreiben muss, wenn ich dessen Parameter/Argumente mit Hilfe der beiden Zeichen "<<" übergeben möchte? (also so wie beim "cout() << "la la la";)
:
Verschoben durch Admin
Danke schön. Irgendwie stelle ich mich wohl trotzdem zu blöd an. Ich habe nun diesen Code:
1 | class debugFile |
2 | {
|
3 | public:
|
4 | explicit debugFile(QWidget *parent = 0); |
5 | ~debugFile(); |
6 | |
7 | void console(QString str); |
8 | debugFile operator<< (QString str); |
9 | |
10 | protected:
|
11 | |
12 | };
|
13 | debugFile::debugFile(QWidget *parent) |
14 | {
|
15 | qDebug() << "init debug_file"; |
16 | }
|
17 | debugFile::~debugFile() |
18 | {
|
19 | qDebug() << "debugFile end"; |
20 | }
|
21 | /* append to console */
|
22 | void debugFile::console(QString str) |
23 | {
|
24 | }
|
25 | debugFile debugFile::operator<< (QString str) |
26 | {
|
27 | qDebug() << str; |
28 | return *this; |
29 | }
|
Rufe ich diesen nun aber in meiner Main auf,
1 | debug = new debugFile(); |
2 | debugFile << QString("--> start gui <--"); |
erhalte ich eine Fehlermeldung: Fehler:expected unqualified-id before '<<' token Was soll denn da nicht passen?
Sorry, aber ich glaube, du solltest dich erst mal mit den Basics von c++ beschäftigen. Klasse vs Object Instanz vs Referenz und nicht zuletzt anerkannte Codingstyles, wie Klassen: Großer Anfangsbuchstabe, Objekte: kleiner Anfangsbuchstabe.
Ganz ohne es nachvollzogen zu haben, soll es nicht
1 | debug = new debugFile(); |
2 | debug << QString("--> start gui <--"); |
heißen?
Dussel schrieb: > Ganz ohne es nachvollzogen zu haben, soll es nicht >
1 | debug = new debugFile(); |
2 | debug << QString("--> start gui <--"); |
> heißen?
Würde ich auch drauf tippen: Den überladenen Operator auf eine Instanz
der Klasse anwenden.
:
Bearbeitet durch User
Dussel schrieb: > Ganz ohne es nachvollzogen zu haben das ist ein offensichtliches Problem, ein anderes ist die ganzen by-value und non-const parameter und return values
Dussel schrieb: > Ganz ohne es nachvollzogen zu haben, soll es nicht >
1 | debug = new debugFile(); |
2 | > debug << QString("--> start gui <--"); |
> heißen? debug wurde nie deklariert, muss aber ein Zeigertyp sein. << erwartet aber eine Referenz. brechpunkt schrieb: > debugFile operator<< (QString str); Ist allerdings eh Quatsch. Der Rückgabewert sollte hier eine Referenz sein und str eine const Referenz. Diese Dinge haben erstmal Vorrang vor Spielereien mit operator <<
Malte S. schrieb: > Ist allerdings eh Quatsch. Ganz abgesehen davon, dass man solche Operatoren als freistehende Operatoren implementiert. Denn sonst muss man bei jeder weiteren Klasse, die sich über so ein debugFile ausgeben können soll, jedes mal die Implementierung von debugFile ändern. Und genau das will man eigentlich überhaupt nicht.
Abgesehen von den oben benannten Fehlern: Macht es Sinn, sowas selber zu programmieren? die QT-Eigene QDebug Klasse hat einen Constructor QDebug(QIODevice * device) Das damit erzeugte QDebug-Objekt schreibt, oh Wunder, seine Ausgabe in die angegebene Datei. Alles fertig, "<<"-Operatoren sind vorhanden, falls doch welche für eigene Klassen nachgerüstet werden müssen, sind die dann auch gleich Global und für alle sonstigen Debug-Zwecke vorhanden. Alternative, weniger OO aber oft einfacher/sinnvoller: qInstallMessageHandler aus der <QtGlobal> verwenden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.