2013-10-02 110 views
0

我有這樣一個類:當使用menu_selector時,爲什麼「Class :: method」而不僅僅是「method」?

class A 
{ 
    public: 
     A(); 
     ~A(); 

     bool init(); 
    private: 

     void LeftCallback(CCObject* sender);  
} 

在我的init方法我嘗試創建使用menu_selector:

menu_selector(LeftCallback); 

的問題是,這是行不通的。我必須提供一流的適用範圍,使其以這種方式工作:

menu_selector(A::LeftCallback); 

爲什麼我不得不添加的類別範圍在這種情況下,而不是僅僅使用方法的名字嗎?

在此先感謝。

+2

如果它是一個成員函數,怎麼會發現它沒有它所屬類的名稱? – juanchopanza

+0

爲什麼不從當前的調用者範圍中獲取?我可能會陷入混亂......但我認爲這是敏感的。不是嗎?我的意思是,我在一個屬於LeftCallback方法所屬的類的方法中構建選擇器。 – Notbad

+1

在這種情況下,你應該澄清你的問題。 – juanchopanza

回答

2

基本上,因爲語言需要你。

我不完全確定這是爲什麼決定的,但它確實有助於避免函數和方法指針之間的歧義,甚至對於讀取您的代碼的人來說也是如此。

+0

謝謝,這對我來說已經足夠了。上次我在2年前使用過C++,並忘記了這些小東西。感謝您的信息。無論如何,視覺工作室吐出一個真正神祕的錯誤與真正的問題沒有任何關係。 '&'對綁定成員函數表達式進行非法操作。對我來說這不是一個好的錯誤解釋。 – Notbad

+0

原因很簡單,「LeftCallback」可能是一個類實例方法或在同一個文件中聲明的C函數。爲了避免這種歧義,類名必須以前綴爲前綴。 A :: LeftCallback引用類A的LeftCallback方法,而LeftCallback引用一個名爲LeftCallback的C函數。 – LearnCocos2D

+0

@ LearnCocos2D實際上,這並不比直接調用'LeftCallback(...)'更加模糊,它可以解析爲調用方法,但我想它確實使代碼更清晰一些。 – zennehoy

相關問題