2016-10-21 5 views
0

Ich versuche, eine Struktur-Funktion auf eine andere Funktion einer anderen Struktur zu zeigen,Funktion struct Punkte zu anderen Funktion anderer struct

Plase dies berücksichtigen:

// 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. 
} 

für mich, das sieht gut aus, aber bei der Kompilierung gibt mir den Fehler:

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

Antwort

1

der Zeiger zeigt auf ein Mitglied aus Klasse/Struktur nicht wirklich bedeutet, zu einer Adresse, es ist nur als Offset-Punkte von this.

Also der Zeigertyp aus der Klasse/Struktur (wie in Ihrem Code, int()(int)) unterscheidet sich von der inneren (wie, int (::)(int)).

Sie müssen den Zeiger mit einem Klassen-/Strukturnamen deklarieren, der ein Bereich zu sein scheint (und es tut).

+0

ist es nicht möglich ohne einen Namen? – nikomaster

+0

Es funktioniert, um ein Schlüsselwort 'static' vor' GetValA() 'in diesem Programm hinzuzufügen. aber vielleicht schreibst du nicht genau. – uscq