不能將參數 1 從“int &(__thiscall RBTree::* )(RBTreeNode *)”轉換爲“int &(__cdecl *)(RBTreeNode *)”

因爲你需要的是一個類的函數地址而不是對象的。所以必需用靜態成員函數。

static  int    implement(int x); //改成靜態成員函數

或者友元也可以吧???


thiscall僅僅應用於“C++”成員函數。this指針存放於CX/ECX寄存器中,參數從右到左壓。thiscall不是關鍵詞,因此不能被程序員指定。 

__cdecl 
C調用約定(即用__cdecl關鍵字說明)(The C default calling convention)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於傳送參數的內存棧是由調用者來維護的(正因爲如此,實現可變參數vararg的函數(如printf)只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。 _cdecl是C和C++程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函數採用從右到左的壓棧方式。VC將函數編譯後會在函數名前面加上下劃線前綴。

聲明的話直接像下面這樣就行了
C/C++ code
?
1
  int __cdecl    implement(int x); 
發佈了74 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章