簡體   English   中英

從成員函數數組訪問成員函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM