[英]How to call a pointer to method from another method
前段時間我遇到了這個問題,我放棄了,但是最近又回來了。
#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 。 但這似乎並不能完全解決我的問題。
實際上,這兩個問題只有一個區別-函數的調用點。
謝謝你的時間
“ 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 );
您可以做一些改善的事情,但這應該可以幫助您入門。
如果希望調用一個指向element2D成員的指針,則需要一個指向element2D對象的指針。 考慮使用Boost.Function或Boost.Signals2獲得所需的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.