2012-05-05 50 views
-1

函數指針爲什麼下面的代碼導致錯誤:錯誤使用C++

class A { 

public: 
     typedef void (A::*funptr)(void); 

     void fun(void) { 
       cout << " Fun Call " <<endl; 
     } 

     void foo(void) { 
       cout << " Foo Call " <<endl; 
     } 

     funptr p[2]; 
     funptr q; 

     A() 
     { 
       p[0]=&A::foo; 
       p[1]=&A::fun; 
       q =&A::fun; 
     } 
}; 


int main() 
{ 

A obj; 

(obj.*q)(void); 

//(obj.p[0])(); 
//(obj.p[1])(); 

return 0; 
} 
+2

什麼行和錯誤是什麼? –

+0

什麼是錯誤? –

+1

因爲'cout'未申報。 '#include '並使用'std :: cout'。 :| –

回答

5

您將需要調用它是這樣的:

(obj.*obj.q)(); 

*運算符不採取成員名稱在右側,而是一個表達式,其值爲成員指針。當你這樣寫:

(obj.*q)(); 

它正在尋找一個名爲q的變量,但範圍內沒有這樣的變量。

+0

工作,但爲什麼。* q不會導致成員指針。你可以在這方面提出一些看法。 – Dexter

+0

我試圖擴大一點解釋。 –

0

將所有出現的(void)更改爲()。在聲明中它是多餘的,並且在通話本身上它是不允許的。

+4

這是真的,但它應該是一個評論,而不是一個答案。 – mfontanini

+1

@fontanini可能。但它確實解釋了其中的一個錯誤。 –