不能将参数 1 从“int &(__thiscall RBTree<T>::* )(RBTreeNode<T> *)”转换为“int &(__cdecl *)(RBTreeNode<T> *)”

来源:互联网 发布:网络拨号连接在哪里 编辑:程序博客网 时间:2024/05/03 19:30

因为你需要的是一个类的函数地址而不是对象的。所以必需用静态成员函数。

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); 
0 0
原创粉丝点击