2016-10-21 2 views
0

Я пытаюсь указать функцию структуры к другой функции другой структуры,Функция Struct указывает на другую функцию другой структуры

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

указатель указывает на члена из класса/структуры на самом деле не означает, на адрес, он просто указывает как смещение от this.

Таким образом, тип указателя вне класса/структуры (как в вашем коде, int()(int)) отличается от внутреннего (например, int (::)(int)).

Вы должны объявить указатель с именем класса/структуры, представляющим собой область (и она).

+0

невозможно без имени? – nikomaster

+0

Он работает с добавлением ключевого слова 'static' перед' GetValA() 'в этой программе. но, возможно, это не то, что вы пишете точно. – uscq

 Смежные вопросы

  • Нет связанных вопросов^_^