我试图将结构函数指向另一个结构的另一个函数,
请考虑一下:
// 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.
}
对我来说,这看起来不错,但在编译时给了我错误:
[警告]转换为' int(x :: )(int)' to' int()(int)' [-Wpmf-转换]
答案 0 :(得分:1)
指向类/ struct中成员的指针实际上并不意味着指向某个地址,它只是指向this
的偏移量。
因此,类/结构中的指针类型(如代码中的int ()(int)
)与内部不同(如int (::)(int)
)。
您必须使用类/结构名称声明指针,该类/结构名称似乎是范围(并且确实如此)。