2013-07-16 49 views
0

我有以下代碼陣列的函數指針的成員函數

#include<iostream> 
using namespace std; 
class operate 
{ 
    int x; 
    int y; 
public: 
    operate(int _x, int _y):x(_x), y(_y) 
    {} 
    void add(const char* ch) 
    { 
     cout<<ch<<" "<<x+y; 
    } 
    void subtract(const char* ch) 
    { 
     cout<<ch<<" "<<x-y; 
    } 
    void multiply(const char* ch) 
    { 
     cout<<ch<<" "<<x*y; 
    } 
}; 
int main() 
{ 
    void (operate::*fptr[3])(const char*); 
    operate obj(2,3); 
    fptr[0] = &(operate.add);    //problem 
    fptr[1] = &(operate.multiply);   //problem 
    fptr[2] = &(operate.subtract);   //problem 
    (obj.*fptr[0])("adding"); 
    (obj.*fptr[1])("multiplying"); 
    (obj.*fptr[2])("subtracting"); 
} 

看來我不分配成員函數正常工作指針數組。我該如何解決這個問題。我正在使用VS2010

+0

請決定是否有錯誤或不。如果您確定存在錯誤,請告訴我們您期望的行爲以及實際發生的行爲。 – Oswald

+0

@Oswald有一個錯誤,VS2010編譯器沒有顯示正確的錯誤信息。它顯示了標點符號的位置,並且包括這些,這又是一個編譯器錯誤 – Saksham

回答

4

點(member-of)運算符用於訪問對象的成員。對於類和名稱空間,您必須使用::運算符。另外,不要括起,因爲&具有優先級低於::併發布提問之前更具可讀性像

fptr[0] = &operate::add; 
+1

OMG。沒有注意到這個愚蠢的錯誤。非常感謝 – Saksham

+0

@ H2CO3:您好,希望與您聊天。可能嗎? – 2013-07-16 09:01:15

+0

@NishithJainMR [嗨。在這裏。](http://chat.stackoverflow.com/rooms/33537/nishith-jain-m-r-and-h2co3) – 2013-07-16 09:03:53

0

這應該做的工作

void testFP() 
{ 
    typedef void (operate::*memFP)(const char*); 
    memFP fptr[3]; 

    fptr[0] = &operate::add; 
    fptr[1] = &operate::multiply; 
    fptr[2] = &operate::subtract; 
    operate op(42, 42); 

    (op.*(fptr[0]))("adding"); 
}