Forum: PC-Programmierung [C++] cout, << Operator und Memberfunktion


von B. S. (bestucki)


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.

von tictactoe (Gast)


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.

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
Noch kein Account? Hier anmelden.