5

我前段时间遇到过这个问题,我放弃了,但最近又回来了。

#include <iostream>

class element2D;

class node2D
{
public:
    void (element2D::*FunctionPtr)();
    void otherMethod()
    { std::cout << "hello" << std::endl;
        ((this)->*(this->FunctionPtr))(); //ERROR<-------------------
    }

};

class element2D
{
public:
    node2D myNode;
    void doSomething(){ std::cout << "do something" << std::endl; }
};

int main()
{
    element2D myElement;

    myElement.myNode.FunctionPtr = &element2D::doSomething; //OK
    ((myElement).*(myElement.myNode.FunctionPtr))();        //OK

    return 0;
}

我在标记行出现错误:

pointer to member type 'void (element2D::)()' incompatible with object type 'node2D'

我将非常感谢您的帮助。今天有一个类似的问题,部分帮助了我:link。但这似乎不是我问题的完整答案。

实际上这两个问题只有一个区别-调用函数的点。

谢谢你的时间

4

2 回答 2

5

“this”是指向 node2D 的指针,但 FunctionPtr 是指 element2D 的成员——这就是错误。

#if 0 // 损坏的版本

void otherMethod()
{ std::cout << "hello" << std::endl;
    ((this)->*(this->FunctionPtr))(); //ERROR<-------------------
}

#else // 固定版本

void otherMethod( element2D * that )
{ std::cout << "hello" << std::endl;
    ((that)->*(this->FunctionPtr))();
}

#万一

然后你用类似这样的方式调用它:

myElement.myNode.otherMethod( &myElement );

您可以采取一些措施来改进这一点,但这应该可以帮助您入门。

于 2010-03-03T23:52:16.623 回答
0

如果要调用指向 element2D 成员的指针,则需要指向 element2D 对象的指针。考虑将 Boost.Function 或 Boost.Signals2 用于您想要的功能。

于 2010-03-03T23:38:14.760 回答