2014-12-13 112 views
0

是否有一種方法指向由類成員函數指針訪問函數指針類的成員變量的函數?或者我必須將成員變量傳遞給函數?成員變量訪問與指針功能

class A { 
public: 

    int var; 
    void(*fooPtr) (void); 

    //ctor 
    A(void(*funcPtr)(void)) :fooPtr(funcPtr){} 
}; 

void foo(void) { 
    int test = var; 
} 

A classInstance(&foo); 

編譯器錯誤: '變種' 在此範圍內未聲明

+0

您需要明確地將此或* this傳遞給foo。 – kec 2014-12-13 16:57:21

+1

我建議您在下次粘貼代碼之前將代碼放在空間中。否則很難回答。 – ecbrodie 2014-12-13 16:58:27

+1

'foo()'實際上不是你班級的成員! – 2014-12-13 16:58:41

回答

0

FOO()不是A類中的一員。你只需將一個指向函數的指針傳遞給構造函數。您必須將指針或對類實例的引用傳遞給foo()函數,以便它可以訪問var實例。

class A { 
public: 
    int var; 
    void(*fooPtr) (const A&); 

    //ctor 
    A(void(*funcPtr)(const A&)) :fooPtr(funcPtr){} 
}; 

void foo(const A &a) { 
    int test = a.var; 
} 

A classInstance(&foo); 

使用typeddefs來避免這個冗長的函數指針結構甚至更好。

class A { 
typedef void(*MyPtr)(const A&); 

public: 
    int var; 
    MyPtr fooPtr; 

    A(MyPtr fooPtr) :fooPtr(fooPtr){} 
}; 

void foo(const A &a) { 
    int test = a.var; 
} 

A classInstance(&foo);