Hallo,
bei meinen ersten Gehversuchen mit C++ erstellte ich eine Klasse für komplexe Zahlen und überlud den Standardausgabeoperator dementsprechend:
|
C/C++ Quellcode
|
1
2
3
4
5
|
ostream& operator<<(ostream& os, const komplex& z) {
os << z.r << '+' << z.i << 'i';
return os;
}
|
Ich kann allerdings nicht nachvollziehen, warum der Parameter
z als konstant deklariert sein muss, damit diese Überladung auch mit Funktionen, die eine Instanz von
komplex zurückgeben, funktioniert.
Vereinfachtes Beispiel:
|
C/C++ Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
ostream& operator<<(ostream& os, komplex& z); // Schnittstelle verändert!
// […]
komplex f();
// […]
{
komplex a(1, 1);
cout << a; // Das funktioniert
cout << f(); // Das hingegen nicht
}
|
Fehler: no match for »operator<<« in »std::cout << f()«