C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C指向函数调用的指针不在范围内大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我花了最后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”,这让我觉得很奇怪,但我发现的所有信息都表明它必须以这种方式完成,事实上它如果我不这么做的话会产生很多错误.

调用属于目标[0]的* OnFire()指针的正确语法是什么?

解决方法

调用指向成员函数的指针的语法非常糟糕.这是正确的语法:
if ((targets[0]->*(targets[0]->OnFirE))() == truE)

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

#define Call_R_843_11845@EMBER_FN(object,ptrToMember)  ((object).*(ptrToMember))

...

 if (Call_R_843_11845@EMBER_FN(*targets[0],targets[0]->OnFirE)() == truE)

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。