2016-08-01 16 views
1

Ich versuche, ein Tupel zu erstellen, das einen Zeiger auf eine void-Member-Funktion enthält, aber ich habe Probleme, damit es funktioniert. hier ist mein Code: „ungültige Verwendung von Leeren Ausdruck“Tupel von void member Funktionen

class A 
{ 
    void dostuff(){ cout<<" doing stuff "} 
}; 

class B 
{ 
    A* aobj; 
    typedef vector<vector<tuple<int,int,void(A::*)()>>> sequence; 

    sequence Sequence; 

    void getinfo(int n1, int n2, void(A::*func)()) 
    { 
     Sequence.resize(1); 
     Sequence[0].push_back(make_tuple(n1,n2,(aobj->*func)()))//<--ERROR HERE 
    }; 
}; 

es mir den Fehler ist zu geben Ich versuchte auch, die Funktion zu vereinfachen:

void getinfo(void(A::*func)()) 
{ 
    make_tuple((aobj->*func)()); 
} 

und es gibt mir immer noch den gleichen Fehler.

+7

'(aobj -> * func)()' ruft die Methode auf, die nichts zurückgibt; Sie versuchen, das Nichts in das Tupel zu legen. Wenn Sie den Member-Zeiger selbst platzieren möchten, wäre das 'make_tuple (n1, n2, func)' –

+5

@IgorTandetnik, ich denke, dass es verdient, in eine Antwort umgewandelt werden. –

Antwort

0

Wie Igor Tandetnik darauf hingewiesen hat, hat (aobj -> * func)() die Methode aufgerufen und void an die Funktion make_tuple() zurückgegeben. Um einen Mitgliedszeiger zu übergeben, sollte stattdessen make_tuple (n1, n2, func) verwendet werden.