[C++] cout, << Operator und Memberfunktion

OP #3968384
Lesenswert?
• ▲
▼
Hallo zusammen

Ich habe wieder ein Problem, das ich nicht selbst lösen kann und für das 
mir die passenden Stichworte für eine erfolgreiche Suche fehlen. Hier 
mein Minimalbeispiel:
1
#include <iostream>
2

3
std::ostream & Help(
4
  std::ostream & Output
5
){
6
  return Output << "Hilfetext";
7
}
8

9
class myclass{
10
  public:
11
    std::ostream & Help(
12
      std::ostream & Output
13
    ){
14
      return Output << "Hilfetext";
15
    }
16
};
17

18
int main(void){
19
  std::cout << Help << '\n'; /* funktionert */
20
  
21
  myclass Test{};
22
  std::cout << Test.Help << '\n'; /* Fehlermeldung */
23
  
24
  return 0;
25
}

Fehlermeldung:
1
[Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and '<unresolved overloaded function type>')

Warum funktioniert die Sache mit einer freistehenden Funktion, nicht 
aber mit einer Memberfunktion? Was muss ich ändern, damit mein Beispiel 
funktioniert?

Bemerkungen:
- Die Funktion operator<< wird bereits verwendet, um das Objekt 
auszugeben.
- Der Hilfetext wird dynamisch zur Laufzeit zusammengesetzt, deshalb 
möchte ich eine solche Funktion wie in meinem Beispiel.
Gast #3968589
Lesenswert?
• ▲
▼
be stucki schrieb:
> Warum funktioniert die Sache mit einer freistehenden Funktion, nicht
> aber mit einer Memberfunktion? Was muss ich ändern, damit mein Beispiel
> funktioniert?

Weil dieser Operator definiert ist:
1
basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& (*pf)(basic_ostream<charT,traits>&));

aber kein entsprechender, der eine nicht-statische Member-Funktion 
akzeptieren würde. Das kann auch nicht gehen, denn um die 
nicht-statische Member-Funktion aufrufen zu können, müsste ein Objekt 
der Klasse vorhanden sein, auf das die Member-Funktion angewendet wird.

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