Frage zu Funktionspointer
-
Hallo liebes Forum
ich beschäftige mich imo mit Funktionszeigern und habe da einpaar Verständnisprobleme. Hier mal der Code:
//proto.h #ifndef __PROTO_H #define __PROTO_H ... typedef eMBException(*pxMBFunctionHandler)(UCHAR *pucFrame, USHORT *pusLength); typedef struct{ UCHAR ucFunctionCode; pxMBFunctionHandler pxHandler; }xMBFunctionHandler; ... #endif //TestModul.cpp #include<stdio.h> #include<windows.h> #include<string.h> #include "proto.h" int testfunc1(){ pxMBFunctionHandler handleA; UCHAR frame[]={0x23, 0xa2, 0xd2}; USHORT l[]={4}; UCHAR *pucFrame; USHORT *pusLength; pucFrame=frame; pusLength=l; (*handleA)(pucFrame, pusLength); return 0; }
Wenn ich nun den Code kompiliere (MS VS 2005) bekomme ich die Warnung das " handleA " nicht initialisiert wurde. Wenn ich dann eine Eingabe mache stürzt das Programm ab.
Kann mir jemand sagen wie ich " handleA" initialisieren muss bzw. womit?
Die Variable ist doch eigentlich so eine Art Vermerk an welcher Adresse eine entsprechende Funktion zu finden ist und welche Parameter sie übergeben bekommt? Oder liege ich da völlig daneben vom Verständis herBräuchte da einbischen Hilfe
-
Da hat der Compiler auch völlig Recht. Du weist der Variable "handleA" auch nie eine Funktion zu welche der Signatur des Funktionszeigers entspricht.
Hier mal ein kleines Beispiel wie man Funktionszeiger verwenden kann:
#include <iostream> typedef void(*func_ptr)( char const* ); static inline void f( char const* s ) { std::cout << "f(\"" << s << "\");" << std::endl; } static inline void f2( char const* s ) { std::cout << "f2(\"" << s << "\");" << std::endl; } static inline void call( func_ptr func ) { func( "Foobar" ); } int main() { call( &f ); call( &f2 ); func_ptr func = &f; func( "Baz" ); std::cin.get(); return 0; }
Gut Schuß
VuuRWerK
-
Ah sehr cool! Danke dir für deine Hilfe.