首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从成员函数数组访问成员函数

从成员函数数组访问成员函数
EN

Stack Overflow用户
提问于 2012-11-14 08:19:20
回答 3查看 232关注 0票数 0

我已经将几个成员函数分组到一个数组中。如何从数组中访问函数?我得到了“error C2064: term不会计算为接受0个参数的函数”。见下文。

代码语言:javascript
运行
复制
class A
{
public:

    //Constructor
    A()
    {
        //Fill function array
        ClipFunction[0] = &A::ClipTop;
        ClipFunction[1] = &A::ClipBottom;
        ClipFunction[2] = &A::ClipLeft;
        ClipFunction[3] = &A::ClipRight;
    }

    //Declare array
    typedef void (A::*ClipFunction_ptr) ();
    ClipFunction_ptr ClipFunction[4];

    //Clipping functions
    void ClipTop();
    void ClipBottom();
    void ClipLeft();
    void ClipRight();

    //Start clipping process
    void StartClip();

};

//Define clipping functions
void A::ClipTop() {}
void A::ClipBottom() {}
void A::ClipLeft() {}
void A::ClipRight() {}

//Define A::StartClip()
void A::StartClip()
{
    //Run through all functions in the array
    for (unsigned int i = 0; i < 4; i++)
    {
        ClipFunction[i](); //ERROR. How do I access ClipFunction[i] ???
    }

}   
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-14 08:40:16

我认为问题在于您需要像在http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/language/ref/cplr034.htm中那样显式地使用"this“。

因此,在您的情况下,您应该使用

代码语言:javascript
运行
复制
    (this ->* ClipFunction[i]) ();

而不是

代码语言:javascript
运行
复制
    ClipFunction[i]();

PS

当我回复这篇文章时,我没有看到Vite Falcon的回答。基本上我们说的是同一件事,但我不认为他的代码“this->(*ClipFunctioni)()”会被编译,因为我的机器上的GCC给出了错误。"(this->*ClipFunctioni)()“是正确的形式。

票数 1
EN

Stack Overflow用户

发布于 2012-11-14 08:27:25

您需要像这样取消对函数的引用:this->(*ClipFunction[i])();

您缺少的是this,或者更确切地说,编译器正在抱怨它没有第一个参数(调用成员函数的对象的实例)来将其传递给函数。

向编译器发送成员函数:void A::ClipFunction() { }

翻译成类似于:void ClipFunction(A* this) { }

因此会出现这样的错误,即该函数不是一个零参数函数。

票数 3
EN

Stack Overflow用户

发布于 2012-11-14 08:30:18

我认为你不希望在你的类型定义中使用作用域解析操作符::。相反,试着把

代码语言:javascript
运行
复制
    typedef void (*ClipFunction_ptr) ();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13371182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档