问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么C++成员函数不能作为C求答案

发布网友 发布时间:2023-08-01 18:37

我来回答

1个回答

热心网友 时间:2023-08-05 15:56

1. -Style回调函数?在C语言中,通过注册函数指针的方式,来实现函数回调。如下是一个的例子。 //回调函数指针 typedef int (*functionPointer_t)(int*); int myFunc1(int *arg) { *arg = 100; return 0; } void CallerFunc(functionPointer_t fp) { int arg = 0; fp(&arg); //这里通过函数指针调用被调函数 } int main() { CallerFunc(myMemberFunc1); return 0; } 但是如果将类的成员函数作为回调的函数指针传进去。结果是不成功的。如下所示: //回调函数指针 typedef int (*functionPointer_t)(int*); void CallerFunc(functionPointer_t fp) { int arg = 0; fp(&arg); class MyClass { public: int myMemberFunc1(int *arg); }; int MyClass::myMemberFunc1(int *arg) { *arg = 100; return 0; } int main() { CallerFunc(&MyClass::myMemberFunc1); return 0; } VC2008编译错误如下: >error C2664: “CallerFunc”: 不能将参数1 从“int (__thiscall MyClass::* )(int *)”转换为“functionPointer_t” 为什么呢?从VC编译错误可以简单看出,成员函数地址与期望的函数指针类型不匹配。普通类成员函数的修饰符是 __thiscall,而C/C++全局函数的默认修饰符是 __cdecl。 更进一步来说:普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数但是确有不同的数据成员。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
南安椎间盘突出症的症状,悬壶邱腰神在陕西哪里 安康腰椎间盘突出一条腿麻保守治疗的方法,悬壶邱大夫的详细位置_百度知 ... 宣传片拍摄有哪些长处? 继承房产过户费用要多少? 继承5万房产过户需要多少费用多少钱 继承的房产过户需要多少费用 继承5万房产过户需要多少费用 灵芝茶减肥效果怎么样 南京滴滴和t3哪个收入多 属虎女人的和属鸡男人的配吗 为什么C++成员函数不能作为C-Style回调函数 C++类的成员函数如何作为回调函数 龙眼皮的功效与作用 550理科最好的一本大学 上坟不能拿的四种水果 比喻椅子的一句话有哪些? 为什么说革命是被迫的选择? 选择与被迫 梦见自己被迫做出选择是什么预兆? 西南政法大学留学项目2+2模式是双学位吗?还是只拿国外的学位? 请问西南政法大学自考本科文凭国家承认吗? 河北611分能上什么大学 origin中如何将几点用平滑的曲线链起来啊? 斯柯达昊锐车窗压条怎么拆 卡特挖掘机电脑板拆装流程 斯科达昊锐天窗怎么拆 斯柯达昊锐的遮阳板怎么样拿下来 吉林省今年多少高考生 吉林省今年高考理科多少人 素颜的繁体字是 南京理工大学就业怎么样? 请问韶关17路车最晚一班是几点? 南京理工大学副教授待遇 求粉色头发 女主的动漫。 ...站距离韶关老火车站多远距离?坐公交车多长时间?打的多长时间多少钱... 马儿吃草四亩地什么肖 ps中怎么把图片拉长 PS图像处理怎么拉长 今年夏天那里最热? 崆峒山里平凉市区多远? 平凉人可以养春兰吗 ...或盗匪之忧,或失意于水边上,或生灾于酒店,或点水之人相害,或北... “受人点水之恩,必将涌泉相报”如果这个人是坏人该不该相报? 求天尊猎艳记无删节版 mg4j2cha是苹果几 苹果手机型号mg4j2ch/a序列号dnpp28dkg5mv 我今年17岁,男,最近有尿频尿急的症状,尿完后过一阵还有轻微尿感,但可 ... 华为荣耀5c高配版有双卡的吗 中班幼儿假期在家表现 持马来西亚护照,在罗湖口岸不能办理落地签了吗?有什么办法可以办理...