2012-04-12 9 views
0

In meiner Klasse Tabla ich einen öffentlichen Zeiger auf Verfahren habe:C++ Zeiger auf einen Klasse Methodenaufruf

public: 
    int (Tabla :: *punterofunc)(int,int); 

In Haupt-I-Punkt es zu einer Klassenmethode:

tablita.punterofunc = &Tabla :: in_lineal; 

Aber dieser Aufruf doesn arbeite nicht!

tablita->punterofunc(num,0); 
+0

Was die Ausnahme/Fehler erhalten Sie? –

+0

/home/frein/Desktop/tablashash/main.cpp|29|fehler: Der Basisoperand von '->' hat den Nicht-Zeigertyp 'Tabla' | – freinn

Antwort

6

Ich glaube, Sie für diese schmackhafte Syntax suchen:

((tablita).*(tablita.punterofunc))(num,0); 

tablita.punterofunc ist Mitglied Funktionszeiger. Die allgemeine Syntax für den Aufruf einen Zeiger-to-Mitglied-Funktion p auf einem Objekt o ist:

((o).*(p))(args...); 

nur dann Anwendung, wenn an Ihrem Code. (Einige der Parens sind möglicherweise nicht in allen Fällen notwendig (nicht sicher), aber wenn Sie dabei bleiben, sollte es die ganze Zeit funktionieren.)

+0

omg omg !!! Danke! – freinn

+0

+1 Dies ist der richtige Weg. – netcoder

+0

Was? Gibt es dafür keinen syntaktischen Zucker? Das könnte ich kaum als lecker bezeichnen. – scientiaesthete

1

Versuchen Sie folgendes:

tablita.*punterofunc(num,0); 
+0

Ich habe aber getan .../home/freisinn/Desktop/tablashash/main.cpp | 29 | Fehler: 'Punterofunc' wurde in diesem Bereich nicht deklariert | – freinn

+0

Ja, ignoriere meine Antwort. – scientiaesthete

Verwandte Themen