2013-07-11 134 views
2

我想從一個類的函數傳遞給其他函數參數。我得到這個錯誤。C++:作爲另一個函數的參數的成員函數

錯誤:類型無效(A_T ::)(INT)「的參數不匹配 '無效(*)(int)的'

有管理這個辦法,還是使用類中的函數a。提前致謝。

#include <iostream> 

using namespace std; 

void procces(void func(int x),int y); 

class A_t 
{ 
    public: 
     A_t(); 
     void function(int x) 
     { 
      cout << x << endl; 
     } 
}; 

int main() 
{ 
    A_t a; 

    procces(a.function,10); 
} 

void procces(void func(int x),int y) 
{ 
    func(y); 
    return; 
} 
+7

這是正確的,函數指針和成員函數指針是不一樣的東西。 – chris

+1

請參閱http://www.parashift.com/c++-faq/pointers-to-members.html這是第一件當我google'd「成員函數參數」,「成員函數指針」或「成員函數作爲另一個函數的參數「 – kfsone

+1

@kfsone,+1,但沒有人閱讀C++ FAQ lite,它比試圖學習更容易:-( –

回答

5

下面是如何利用一個指針到功能部件的例子:

class A_t { 
public: 
    void func(int); 
    void func2(int); 
    void func3(int); 
    void func4(int); 
    ... 
}; 

typedef void (A_t::*fnPtr)(int); 


int process(A_t& o, fnPtr p, int x) 
{ 
    return ((o).*(p))(x); 
} 

int main() 
{ 
    fnPtr p = &A_t::func; 
    A_t a; 
    process(a, p, 1); 
    ... 
} 

在主函數可以使用func成員函數以及func2func3func4

+0

謝謝。這真的很有幫助。 –

+0

歡迎您!不要忘記將您的問題標記爲已回答將它從未回答的頁面中刪除:) –

1

函數()必須聲明爲靜態才能使其工作。如果你將一個非靜態成員函數放入一個類中,它就會綁定到該類的特定實例。

1

,如果你想定義一個API可以爲其映射C函數和C++成員函數,如下面定義的過程,並使用一個綁定來傳遞構件函數....

NB:未測試(I在我的手機上!)

class A { 
public: 
    void func(int); 
    static void StaticWrapper(A* ptr, int i) 
    { ptr->func(i);} 
... 
}; 

typedef void (CStyleCB*)(int); 


    int process(CStyleCB p, int x) 
    { 
     return (*p)(x); 
    } 

    int main() 
    { 
     A a; 
     process(bind(&A::StaticWrapper, this, _1), 1); 
     ... 
    } 
相關問題