C++ Methode für ArgumentenÜbergabe durch "<<" schreiben

Gast #4248253
Lesenswert?
• ▲
▼
"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";)
Gast #4248334
Lesenswert?
• ▲
▼
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?
#4248919
Lesenswert?
• ▲
▼
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 <<
Gast #4249362
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren