2016-10-21 116 views
0

我想指出的結構功能與其他結構的另一個功能的其他功能,功能結構分,其他結構

Plase考慮這個問題:

// Main Structure: 

typedef struct 
{ 
    int GetValA(int a) 
    { 
     return a * 2; 
    } 
} x; 


typedef struct 
{ 
    int(*HGetValA)(int); // Pointer function  
} hookx; 

// Then 

int main() 
{ 
    x v1; 

    hookx* v2; 

    v2 = (hookx*)&v1; // or 0x0 memory address 

    // Now declaring pointer function 

    v2->HGetValA = (int(*)(int))&v1.GetValA; // Pointing to function of the main structure. 
} 

對我來說,這看起來不錯,但在編譯的時候給我的錯誤:

[Warning] converting from 'int (x::)(int)' to 'int ()(int)' [-Wpmf-conversions]

回答

1

的指針指向從類/結構的成員並沒有真正意義的地址,它只是點從偏移。

因此,類/結構(如代碼int()(int))中的指針類型與內部(如int (::)(int))不同。

你必須聲明一個類/結構體名稱的指針,它似乎是一個範圍(和它)。

+0

沒有名字是不可能的? – nikomaster

+0

它在這個程序中的'GetValA()'之前添加關鍵字'static'。但也許這不是你準確寫的。 – uscq