Array of pointers to a functions
-
ok i have very strange problem in first case everything is ok
int (*handler[15])(int parm); int user_trans_quit(int parm); int user_trans_quit(int parm){ printf("Just a test %d", parm); return 0; } int _tmain(int argc, _TCHAR* argv[]) { handler[1]=user_trans_quit; handler[1](1); }
but when i try to meke OO compiler give me this error "error C2064: term does not evaluate to a function taking 1 arguments"#pragma once class PacketHandler { private : public: PacketHandler(void); ~PacketHandler(void); int LoginAck(char *parm); void Action(int i, char *data); int (PacketHandler::*handler[255])(char *parm); }; .... #include "StdAfx.h" #include ".\packethandler.h" PacketHandler::PacketHandler(void) { handler[1]=LoginAck; } PacketHandler::~PacketHandler(void) { } int PacketHandler::LoginAck(char *parm) { return 0; } void PacketHandler::Action(int i, char *data) { handler[i](data); //error C2064: term does not evaluate to a function taking 1 arguments }
10x in advance PS:sry about my bad english -
ok i have very strange problem in first case everything is ok
int (*handler[15])(int parm); int user_trans_quit(int parm); int user_trans_quit(int parm){ printf("Just a test %d", parm); return 0; } int _tmain(int argc, _TCHAR* argv[]) { handler[1]=user_trans_quit; handler[1](1); }
but when i try to meke OO compiler give me this error "error C2064: term does not evaluate to a function taking 1 arguments"#pragma once class PacketHandler { private : public: PacketHandler(void); ~PacketHandler(void); int LoginAck(char *parm); void Action(int i, char *data); int (PacketHandler::*handler[255])(char *parm); }; .... #include "StdAfx.h" #include ".\packethandler.h" PacketHandler::PacketHandler(void) { handler[1]=LoginAck; } PacketHandler::~PacketHandler(void) { } int PacketHandler::LoginAck(char *parm) { return 0; } void PacketHandler::Action(int i, char *data) { handler[i](data); //error C2064: term does not evaluate to a function taking 1 arguments }
10x in advance PS:sry about my bad english -
ok i have very strange problem in first case everything is ok
int (*handler[15])(int parm); int user_trans_quit(int parm); int user_trans_quit(int parm){ printf("Just a test %d", parm); return 0; } int _tmain(int argc, _TCHAR* argv[]) { handler[1]=user_trans_quit; handler[1](1); }
but when i try to meke OO compiler give me this error "error C2064: term does not evaluate to a function taking 1 arguments"#pragma once class PacketHandler { private : public: PacketHandler(void); ~PacketHandler(void); int LoginAck(char *parm); void Action(int i, char *data); int (PacketHandler::*handler[255])(char *parm); }; .... #include "StdAfx.h" #include ".\packethandler.h" PacketHandler::PacketHandler(void) { handler[1]=LoginAck; } PacketHandler::~PacketHandler(void) { } int PacketHandler::LoginAck(char *parm) { return 0; } void PacketHandler::Action(int i, char *data) { handler[i](data); //error C2064: term does not evaluate to a function taking 1 arguments }
10x in advance PS:sry about my bad english(this->*handler[i])(data)
See the FAQ for more: 6.5 How do I declare and use a pointer to a class member function?[^] --Mike-- Ericahist | CP SearchBar v2.0.2 | Homepage | 1ClickPicGrabber New v2.0! | RightClick-Encrypt "Just because the box has 2 gigabytes of memory doesn't mean you get to use it all!" -- Rico Mariani, CLR perf guy -
ok i have very strange problem in first case everything is ok
int (*handler[15])(int parm); int user_trans_quit(int parm); int user_trans_quit(int parm){ printf("Just a test %d", parm); return 0; } int _tmain(int argc, _TCHAR* argv[]) { handler[1]=user_trans_quit; handler[1](1); }
but when i try to meke OO compiler give me this error "error C2064: term does not evaluate to a function taking 1 arguments"#pragma once class PacketHandler { private : public: PacketHandler(void); ~PacketHandler(void); int LoginAck(char *parm); void Action(int i, char *data); int (PacketHandler::*handler[255])(char *parm); }; .... #include "StdAfx.h" #include ".\packethandler.h" PacketHandler::PacketHandler(void) { handler[1]=LoginAck; } PacketHandler::~PacketHandler(void) { } int PacketHandler::LoginAck(char *parm) { return 0; } void PacketHandler::Action(int i, char *data) { handler[i](data); //error C2064: term does not evaluate to a function taking 1 arguments }
10x in advance PS:sry about my bad englishI think XSimon is correct about making LoginAck() static. You also need to forward declare your class type "class PacketHandler". Of cource I understand this is only a sample, so the lack of a contructor I am ignoring. The line "handler[1]=LoginAck;" gives the impression you are thinking that the array starts at 1, it does not, the range is 0 to 254. If you want 0 - 255 use 256 instead of 255 in your declaration. Considering where the error occurs, you probably need to declare "int (PacketHandler::*handler[255])(char *parm);" as static. God luck! INTP
-
ok i have very strange problem in first case everything is ok
int (*handler[15])(int parm); int user_trans_quit(int parm); int user_trans_quit(int parm){ printf("Just a test %d", parm); return 0; } int _tmain(int argc, _TCHAR* argv[]) { handler[1]=user_trans_quit; handler[1](1); }
but when i try to meke OO compiler give me this error "error C2064: term does not evaluate to a function taking 1 arguments"#pragma once class PacketHandler { private : public: PacketHandler(void); ~PacketHandler(void); int LoginAck(char *parm); void Action(int i, char *data); int (PacketHandler::*handler[255])(char *parm); }; .... #include "StdAfx.h" #include ".\packethandler.h" PacketHandler::PacketHandler(void) { handler[1]=LoginAck; } PacketHandler::~PacketHandler(void) { } int PacketHandler::LoginAck(char *parm) { return 0; } void PacketHandler::Action(int i, char *data) { handler[i](data); //error C2064: term does not evaluate to a function taking 1 arguments }
10x in advance PS:sry about my bad englishfound the problem 10x alot i must call function in this way (this->*handler[i])(data); .. dont know way its look totaly stuped for me .. but its work :D 10x for the help