【发布时间】:2014-05-31 22:37:01
【问题描述】:
在过去的 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()”时发生错误,它声明它未在此范围内声明。当我在反派构造器内部定义“OnFire”时,我必须用“&villain::”来定义它,这让我感觉很奇怪,但我发现的所有信息都表明它必须以这种方式完成,而且确实会搅动起来如果我尝试其他方式,则会出现大量错误。
调用属于targets[0]的*OnFire()指针的正确语法是什么?
【问题讨论】:
-
不需要使用解引用操作符,直接调用
targets[0]->OnFire() -
@wiily 这对于普通指针来说很好,但对于指向成员的指针则不然。
-
为什么要声明一个数组指针?声明一个数组已经意味着你声明了一个指向它的第一个元素的指针。
-
如果烦人的话,所需的语法至少是完全明确的。
-
@meross 这是一个指针数组。并且数组不是指针,即使它可以衰减为一个。
标签: c++ pointers reference scope function-pointers