fun*_*man 5 c++ member-function-pointers function-pointers
我前段时间遇到过这个问题而且我放弃了,但最近又回来了.
#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;
}
Run Code Online (Sandbox Code Playgroud)
我在标记线上收到错误:
pointer to member type 'void (element2D::)()' incompatible with object type 'node2D'
Run Code Online (Sandbox Code Playgroud)
我真的很感谢你的帮助.今天有类似的问题部分帮助了我:链接.但它似乎并不是我的问题的完整答案.
实际上这两个问题只有一个区别 - 调用函数的点.
谢谢你的时间
"this"是指向node2D的指针,但FunctionPtr指的是element2D的成员 - 即错误.
#if 0 //破碎的版本
void otherMethod()
{ std::cout << "hello" << std::endl;
((this)->*(this->FunctionPtr))(); //ERROR<-------------------
}
Run Code Online (Sandbox Code Playgroud)
#else //修正版
void otherMethod( element2D * that )
{ std::cout << "hello" << std::endl;
((that)->*(this->FunctionPtr))();
}
Run Code Online (Sandbox Code Playgroud)
#万一
然后用以下的方式调用它:
myElement.myNode.otherMethod( &myElement );
Run Code Online (Sandbox Code Playgroud)
有些事情你可以做些改进,但这应该让你开始.
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |