From: "Glover George" <dime@gulfsales.com>
To: <gcc-help@gcc.gnu.org>
Subject: RE: Pointer to a function forbid!!
Date: Fri, 12 Apr 2002 15:15:00 -0000 [thread overview]
Message-ID: <00ce01c1e246$0cb10380$0300a8c0@yellow> (raw)
In-Reply-To: <E16w4Nu-0002jV-00@smtp.web.de>
Thank you, but could you explain something to me ? Is f the name of the
function I'm needing a pointer to, or is it ADDED to the class? I'm not
quite sure how I use this. Is m() the member function that I'm needing
the pointer to? I know I replace the A with the name of my class, but
I'm not sure which other items I'm supposed to substitute for. Thanks a
lot man.
> -----Original Message-----
> From: sebastian-huber@web.de [mailto:sebastian-huber@web.de]
> Sent: Friday, April 12, 2002 11:59 AM
> To: Glover George
> Subject: Re: Pointer to a function forbid!!
>
>
> Hello,
> if you want to avoid global variables, you can try this:
>
> class A {
> public:
> static void f( void* thisPointer)
> {
> static_cast<A*>( thisPointer)->m();
> }
>
> private:
> void m();
> };
>
> This works a least with the POSIX thread functions.
>
> On Thursday 11 April 2002 21:32, you wrote:
> > 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
>
next parent reply other threads:[~2002-04-12 17:18 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E16w4Nu-0002jV-00@smtp.web.de>
2002-04-12 15:15 ` Glover George [this message]
2002-04-13 18:00 ` Sebastian Huber
2002-04-13 21:04 ` Segmentation fault!! Reggie Smith
2002-04-14 1:39 ` Ashish Gupta
[not found] <616BE6A276E3714788D2AC35C40CD18D5B1F89@whale.softwire.co.uk>
2002-04-12 5:56 ` Pointer to a function forbid!! Rupert Wood
[not found] <E16vjXV-0002Ty-00@smtp.web.de>
2002-04-11 12:59 ` Glover George
2002-04-12 10:18 ` Sebastian Huber
2002-04-11 11:32 Glover George
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='00ce01c1e246$0cb10380$0300a8c0@yellow' \
--to=dime@gulfsales.com \
--cc=gcc-help@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).