context: I have an code where I have functions based on MsgID's, all these functions corresponding to MSGID's will be kept in MAP which is in different class. MSGID's would be received in different class and I am trying to pass to MAP which is in other class for getting the function pointer and call the function with parameters.
Below is the fucntion in a class where i receive data and use msg id.
    virtual BOOL _nanoMsgCallBack( VOIDPTR lpv )
    {
        LONG id;
        cout << " In virtual BOOL OnTask( LPVOID lpv ) in main \n";
        nanoMsgThreadId(&id);
        if( lpv )
        {
            //int *pInt = (int *)lpv;
            args *data  = (struct args*)lpv;
            interface = test->getInstanceForMsgID(data->MsgID);
            FUNCPTR func = test->getFunctionPrt(data->MsgID);
            //(interface->*func)(lpv);
            (interface->*func)(lpv); 
            //dont' use cout here, output could be broken up due to threading
            printf("\tthread(%ld, MsgID=%d, and DevID=%d \n",id,data->MsgID,data->DevID);
        }
        return TRUE;
    }
This is how i am declaring my MAP
typedef void (*FUNCPTR)(VOIDPTR);
class clMsgIDMapping
{
private:
    IBackendInterface *testClass;
    std::map<int, FUNCPTR> _mapingTable;
    void setCallback(int MSGID, FUNCPTR funcptr);//This will be called by other classes for setting the Fucntions.
    IBackendInterface* getInstanceForMsgID(int MsgID);
    FUNCPTR getFunctionPrt(int MsgID);
}
Implementation of getFunctionPrt(int MssgID) and getInstanceForMsgID is as follows
IBackendInterface* clMsgIDMapping::getInstanceForMsgID(int MsgID){
    switch(clMsgIDMapping::_sMap.at(MsgID))
    {
    case enmMsgType_Request :
        //return DBUS adapter instance
        return testClass;
        break;
    case enmMsgType_Response:
        //return nanoMsg sender instance
        break;
    case enmMsgType_Event:
        //return DBUS adapter instance
        break;
    case enmMsgType_Blocked:
        //TBD
        break;
    default:
        break;
    }
    return NULL;
}
FUNCPTR clMsgIDMapping::getFunctionPrt(int MsgID){
    return _mapingTable.at(MsgID);
}
This is where setCallback would happen.
#include "Test.h"
Test::Test() {
    // TODO Auto-generated constructor stub
    _instance = clMsgIDMapping::getInstance();
    _instance->setCallback(0x0113, (FUNCPTR)&Test::testFunc);
}
Test::~Test() {
    // TODO Auto-generated destructor stub
}
void Test::Register(){
    // called
}
void Test::testFunc(void* testf){
    std::cout<<"test func called\n";
}
(interface->*func)(lpv); // this line is my error area
 
    