2016-11-20 3 views
-4

Ich versuche Betreiber zu überlasten < < auf Funktion. Ich bin für ein paar Stunden festgefahren, um das herauszufinden. Ich habe eine Menge Beispiele dafür gefunden, wie man das bei Ostream macht, aber keines von ihnen hat mein spezifisches Problem angesprochen.Der Versuch, zu überlasten << Klasse Funktion

#include <iostream> 

class foo 
{ 
public: 
    foo& operator<< (foo& (*pf)(foo&)) 
    { 
    return pf(*this); 
    } 
    foo& do_something_more(foo& os) 
    { 
    return os; 
    } 
}; 

ostream& do_something(ostream& os) 
{ 
    os << "1." << "\n" << "2."; 
    return os; 
} 

int main() 
{ 
    foo a; 

    std::cout << do_something; // this works 
    a << do_something_more; // this do not 

    system("pause"); 
    return 0; 
} 

Dies ist nur ein Beispiel, wie ich versucht habe, dies zu lösen. Ich bekomme den Fehler 'do_something_more': Indeclared Identifier in diesem.

Danke für die Hilfe!

+1

'do_something_more()' ist eine Memberfunktion von 'foo' und Sie benötigen eine Instanz, um sie aufzurufen. –

+0

Oder machen Sie es statisch und verwenden Sie 'a << foo :: do_something_more;' ... oder nur Nichtmitglied. – LogicStuff

+2

Nichts von diesem Zeug macht wirklich Sinn. –

Antwort

-4

Wie der Fehler sagt, haben Sie kein Objekt namens do_something_more deklariert. Dies ist eine Methode in Ihrer foo-Klasse. Versuchen cout<<a.do_something_more();

Auch mit diesem, ich bin nicht sicher, ob es funktionieren wird.

+2

Sie versuchen es zuerst. – LogicStuff

+0

Bitte um Verzeihung? – Javi

Verwandte Themen