函数struct指向其他struct的其他函数

时间:2016-10-21 04:23:57

标签: c++ pointers struct c++14 memory-address

我试图将结构函数指向另一个结构的另一个函数,

请考虑一下:

// 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-转换]

1 个答案:

答案 0 :(得分:1)

指向类/ struct中成员的指针实际上并不意味着指向某个地址,它只是指向this的偏移量。

因此,类/结构中的指针类型(如代码中的int ()(int))与内部不同(如int (::)(int))。

您必须使用类/结构名称声明指针,该类/结构名称似乎是范围(并且确实如此)。