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

OP #3968384
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.