Pointer to a function forbid!!

Glover George dime@gulfsales.com
Thu Apr 11 12:59:00 GMT 2002


That's fine, I really just didn't know if I could attach code on the
list.
Here's where I'm passing the address of gate.DeviceCallbakEventHandler()
to a function (which is part of the Intel UPnP SDK, I'll put it's
declaration below).  See, I have some code that this works with, but its
pure C.  The funtions were defined before main (I mean at the top of the
file that contains main).  They didn't use the & before the function
(which was just DeviceCallbackEventHandler), but if I don't include the
&, it says it can't find a matching function for int (*) (<paramaters>).
Candidates are int DeviceCallbackEventHandler(<parameters>).

I know there can be pointers to functions, but I'm not understanding why
it won't work here.

Muchas Gracias in advance!!!

Int main (arc, argv**){
Gate gate;
.
.
.
if ((ret = UpnpRegisterRootDevice(desc_doc_url,
&gate.DeviceCallbackEventHandler,
                                &gate.device_handle,
&gate.device_handle)) != UPNP_E_SUCCESS)
        {
		...(SNIP)
        }
.
.
.
}
///////Here is the class declaration for a Gate class.

class Gate
{
        public:
                Gate();
                ~Gate();

                int DeviceStateTableInit(char *);
                int DeviceHandleSubscriptionRequest (struct
Upnp_Subscription_Request *sr_event);
                int DeviceHandleGetVarRequest(struct
Upnp_State_Var_Request *);
                int DeviceHandleActionRequest(struct Upnp_Action_Request
*);
                int DeviceCallbackEventHandler(Upnp_EventType EventType,
void*, void*);

                PortMapList m_list;
                IPCon *m_ipcon;
                char *gate_udn;
                UpnpDevice_Handle device_handle;
};
///////AND THE following is the declaration provide in the Intel UPnP
SDK for Linux


/** {\bf UpnpRegisterRootDevice} registers a device application with
 *  the UPnP API.  A device application cannot make any other API
 *  calls until it registers using this function.  Device applications
 *  can also register as control points (see {\bf UpnpRegisterClient}
 *  to get a control point handle to perform control point
 *  functionality).
 *
 *  {\bf UpnpRegisterRootDevice} is synchronous and does not generate
 *  any callbacks.  Callbacks can occur as soon as this function
returns.
 *
 *  @return An integer representing one of the following:
 *    \begin{itemize}
 *      \item {\tt UPNP_E_SUCCESS}: The operation completed
successfully.
 *      \item {\tt UPNP_E_FINISH}: The UPnP library is already
terminated or
 *                                 is not initialized.
 *      \item {\tt UPNP_E_INVALID_DESC}: The description document was
not
 *              found or it does not contain a valid device description.
 *      \item {\tt UPNP_E_INVALID_PARAM}: Either {\bf Callback} or {\bf
Hnd}
 *              are not valid pointers or {\bf DescURL} is {\tt NULL}.
 *      \item {\tt UPNP_E_NETWORK_ERROR}: A network error occurred.
 *      \item {\tt UPNP_E_SOCKET_WRITE}: An error or timeout occurred
writing
 *              to a socket.
 *      \item {\tt UPNP_E_SOCKET_READ}: An error or timeout occurred
reading
 *              from a socket.
 *      \item {\tt UPNP_E_SOCKET_BIND}: An error occurred binding a
socket.
 *      \item {\tt UPNP_E_SOCKET_CONNECT}: An error occurred connecting
the
 *              socket.
 *      \item {\tt UPNP_E_OUTOF_SOCKET}: Too many sockets are currently
 *              allocated.
 *      \item {\tt UPNP_E_OUTOF_MEMORY}: There are insufficient
resources to
 *              register this root device.
 *    \end{itemize} */

int UpnpRegisterRootDevice(
    IN const char *DescUrl,    /** Pointer to a string containing the
                                   description URL for this root device
                                   instance. */
    IN Upnp_FunPtr Callback,   /** Pointer to the callback function for
                                   receiving asynchronous events. */
    IN const void *Cookie,     /** Pointer to user data returned with
the
                                   callback function when invoked. */
    OUT UpnpDevice_Handle *Hnd /** Pointer to a variable to store the
                                   new device handle. */
    );




> -----Original Message-----
> From: sebastian-huber@web.de [mailto:sebastian-huber@web.de] 
> Sent: Thursday, April 11, 2002 1:42 PM
> To: Glover George
> Subject: Re: Pointer to a function forbid!!
> 
> 
> Hello,
> a bit of code might be helpful.
> 
> On Thursday 11 April 2002 20:31, you wrote:
> > Hi, I was wondering if there is ANYWAY to overcome this 
> error message 
> > with G++;
> >
> > I have to pass a pointer to a function as a parameter to some other 
> > function.  However, the funtion I need to pass is a member 
> function of 
> > a class.  When I do, g++ complains with this.
> >
> > ISO C++ forbids taking the address of a bound member 
> function to form 
> > a pointer to member function.  Cannont convert ..... (snip)
> >
> > What exactly does this mean and why not?  The function is 
> of an object 
> > that has been initialized.  It is local to main however.  
> Is it that 
> > it needs to be created with a new before I can do it or is 
> there just 
> > absolutely no way to pass a pointer to a member function?
> >
> > Thank you.
> >
> > Glover George
> > Systems/Networks Admin
> > Gulf Sales & Supply, Inc.
> > (228) 762-0268
> > dime@gulfsales.com
> > http://www.gulfsales.com
> 



More information about the Gcc-help mailing list