C指向函数调用的指针不在范围内

C指向函数调用的指针不在范围内,第1张

概述我花了最后3个小时试图弄清楚我做错了什么.我只需要另外一些眼睛,我已经尝试了我能想到的一切,甚至各种随机排列,试图让编译器告诉我一些有用的东西. 这是我现在的位置: 码: class villain{public: villain(); //lots of other stuff bool Type1EnemyBlasts(); bool Type2EnemyBlast 我花了最后3个小时试图弄清楚我做错了什么.我只需要另外一些眼睛,我已经尝试了我能想到的一切,甚至各种随机排列,试图让编译器告诉我一些有用的东西.

这是我现在的位置:@H_301_3@

码:@H_301_3@

class villain{public:   villain();   //lots of other stuff   bool Type1EnemyBlasts();   bool Type2EnemyBlasts();   bool (villain::*OnFire)();};villain::villain(){    //lots of other stuff    OnFire = &villain::Type1EnemyBlasts;}main{    //lots and lots of other stuff    villain *targets[100];    targets[0] = new villain();    if(targets[0]->*OnFire() == true)    {         //do stuff    }}

当我调用“targets [0] – > * OnFire()”时会发生错误,其中声明它未在此范围内声明.当我在恶棍构造函数中定义它时,我必须用“& villain ::”来定义“OnFire”,这让我觉得很奇怪,但我发现的所有信息都表明它必须以这种方式完成,事实上它如果我不这么做的话会产生很多错误.@H_301_3@

调用属于目标[0]的* OnFire()指针的正确语法是什么?@H_301_3@解决方法 调用指向成员函数的指针的语法非常糟糕.这是正确的语法:

if ((targets[0]->*(targets[0]->OnFire))() == true)

那是彻头彻尾的丑陋.这就是为什么Parashift C++ FAQ page on calling pointers to member functions建议为此目的定义一个宏 – 并注意这些页面的作者不喜欢宏.@H_301_3@

#define CALL_MEMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))... if (CALL_MEMBER_FN(*targets[0],targets[0]->OnFire)() == true)

使用宏或使用std :: function,如sehe的答案中所述.@H_301_3@ 总结

以上是内存溢出为你收集整理的C指向函数调用的指针不在范围内全部内容,希望文章能够帮你解决C指向函数调用的指针不在范围内所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存