[英]Accessing member function from member function array
我已經將幾個成員函數分組到一個數組中。 如何從數組訪問函數? 我收到“錯誤C2064:術語未求值為帶有0個參數的函數”。 見下文。
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] ???
}
}
您需要像這樣取消引用該函數: this->(*ClipFunction[i])();
您缺少的是this
或編譯器在抱怨它沒有第一個參數(調用成員函數的對象實例)將其傳遞給函數。
對於編譯器,成員函數為: void A::ClipFunction() { }
轉換為: void ClipFunction(A* this) { }
因此,錯誤提示該函數不是采用零參數的函數。
我認為問題是您需要像http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/topic/com.ibm.xlcpp8l.doc/language/ref/cplr034.htm中那樣明確使用“ this” 。
所以在你的情況下,你應該使用
(this ->* ClipFunction[i]) ();
代替
ClipFunction[i]();
PS
當我回復此帖子時,我沒有看到Vite Falcon的回答。 基本上,我們說的是同一句話,但是我認為他的代碼“ this->(* ClipFunction [i])()”不會編譯,因為GCC在我的機器上出錯了。 “(this-> * ClipFunction [i])()”是正確的形式。
我不認為您要在typedef中使用范圍解析運算符::
。 而是嘗試把
typedef void (*ClipFunction_ptr) ();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.