2016-08-01 12 views
1

voidメンバ関数へのポインタを含むタプルを作成しようとしていますが、動作させるのに問題があります。 ここに私のコードです:「無効表現の使用は無効です」voidメンバ関数のタプル

それは私にエラーを与えている
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 
    }; 
}; 

私はまたに機能を簡素化しようとした:

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

、それはまだ私に同じエラーを与えます。

+7

'(aobj - > * func)()'はこのメソッドを呼び出しますが、何も返されません。あなたはタプルに何も置こうとしていません。メンバーポインタ自体を配置したい場合は、 'make_tuple(n1、n2、func)' –

+5

@IgorTandetnikですが、これは答えに変換する価値があると思います。 –

答えて

0

Igor Tandetnikが指摘したように、(aobj - > * func)()はメソッドを呼び出し、voidをmake_tuple()関数に戻していました。メンバポインタを渡すには、代わりにmake_tuple(n1、n2、func)を指定する必要があります。

関連する問題