Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Casting a class method in a constructor

Reply
Thread Tools

Casting a class method in a constructor

 
 
tendots@hotmail.co.uk
Guest
Posts: n/a
 
      01-01-2007
Hi all,

I have come up against a problem when I am registering a callback
within a constructor. The code that I am writing contains a class that
deals with everything to do with bringing up a window in the OS (I'm
just trying to encapsulate everything that is particularly OS specific
in my code).

When the class is created the constructor is called and part of the
goodness of window creation involves registering a callback that deals
with messages passed between the OS and the window. The particular
callback code is a member of this window class.

It all goes something like this ....

class win {

public:
win::win();
LRESULT CALLBACK win::msghandler(arg1,arg2..);

}

win::win()
{
....
windowClass.lpfnWndProc = (WNDPROC)msghandler;
....
}

LRESULT CALLBACK win::msghandler(arg1,arg2..)
{
....
}


Hopefully I have made it clear that the way that the callback member
function is used is that it is cast to another type as part of the
constructor's window initialization.

Now the core of this code has all worked fine and dandy in C for me,
but when I port it to C++ it fails and it appears that it fails when
the compiler attempts to make the cast. I know that you should be able
to call member functions in constructors (and in this case it shouldnt
even be a problem with it not being initialized as it is merely being
registered for later use). The compiler I am using is MSVC 6.0 and (if
you hadnt guessed) its a win 32 system - but I dont think that the OS
is the problem here.

How do I get around the inability to compile?
- is it my lack of knowledge of C++ (I only recently have made the
transition from C . Ouch. )
- is it the compiler?

I dont want to split the constructor up into several functions as this
kind of violates the reasons for using C++ in the first place, and
though I can force it to work by declaring the callback as a static I
create other problems for myself elsewhere.

much thanks to everyone for your help and a happy new year - Mathew

 
Reply With Quote
 
 
 
 
Lionel B
Guest
Posts: n/a
 
      01-02-2007
On Mon, 01 Jan 2007 14:52:30 -0800, tendots wrote:

> Hi all,
>
> I have come up against a problem when I am registering a callback
> within a constructor. The code that I am writing contains a class that
> deals with everything to do with bringing up a window in the OS (I'm
> just trying to encapsulate everything that is particularly OS specific
> in my code).


I'm strongly suspect you'll be much better off posting to an OS-specific
newsgroup:

http://www.parashift.com/c++-faq-lit...t.html#faq-5.9

> When the class is created the constructor is called and part of the
> goodness of window creation involves registering a callback that deals
> with messages passed between the OS and the window. The particular
> callback code is a member of this window class.
>
> It all goes something like this ....
>
> class win {
>
> public:
> win::win();
> LRESULT CALLBACK win::msghandler(arg1,arg2..);
>
> }
>
> win::win()
> {
> ...
> windowClass.lpfnWndProc = (WNDPROC)msghandler; ... }
>
> LRESULT CALLBACK win::msghandler(arg1,arg2..) { ... }


Not terribly helpful, because I haven't a clue from your code what LRESULT
or CALLBACK or WNDPROC or windowClass or ... are.

> Hopefully I have made it clear that the way that the callback member
> function is used is that it is cast to another type as part of the
> constructor's window initialization.


But what you _haven't_ made clear is what the cast-from and cast-to
types actually are. This may well be relevant. BTW the code you post uses
a C style cast which may be valid C++ but may not behave the same in C++
as in C.

> Now the core of this code has all worked fine and dandy in C for me, but
> when I port it to C++ it fails


Fails to run? Fails to compile?

> and it appears that it fails when the
> compiler attempts to make the cast.


Ah. Fails to compile. And the error message is...?

> I know that you should be able to
> call member functions in constructors (and in this case it shouldnt even
> be a problem with it not being initialized as it is merely being
> registered for later use). The compiler I am using is MSVC 6.0 and (if
> you hadnt guessed) its a win 32 system - but I dont think that the OS is
> the problem here.
>
> How do I get around the inability to compile? - is it my lack of
> knowledge of C++ (I only recently have made the transition from C .
> Ouch. )


Ummm... possibly

> - is it the compiler?


Ummm... probably not

The problems are:

1) possibly wrong newsgroup, but not really sure, since
2) insufficient information supplied.

Please read the FAQ:

http://www.parashift.com/c++-faq-lite/how-to-post.html

before posting here.

--
Lionel B
 
Reply With Quote
 
 
 
 
Mike Wahler
Guest
Posts: n/a
 
      01-02-2007

<(E-Mail Removed)> wrote in message
news:(E-Mail Removed) ups.com...
> Hi all,
>
> I have come up against a problem when I am registering a callback
> within a constructor. The code that I am writing contains a class that
> deals with everything to do with bringing up a window in the OS (I'm
> just trying to encapsulate everything that is particularly OS specific
> in my code).
>
> When the class is created the constructor is called and part of the
> goodness of window creation involves registering a callback that deals
> with messages passed between the OS and the window. The particular
> callback code is a member of this window class.
>
> It all goes something like this ....
>
> class win {
>
> public:
> win::win();
> LRESULT CALLBACK win::msghandler(arg1,arg2..);
>
> }
>
> win::win()
> {
> ...
> windowClass.lpfnWndProc = (WNDPROC)msghandler;
> ...
> }
>
> LRESULT CALLBACK win::msghandler(arg1,arg2..)
> {
> ...
> }
>
>
> Hopefully I have made it clear that the way that the callback member
> function is used is that it is cast to another type as part of the
> constructor's window initialization.
>
> Now the core of this code has all worked fine and dandy in C for me,
> but when I port it to C++ it fails and it appears that it fails when
> the compiler attempts to make the cast. I know that you should be able
> to call member functions in constructors (and in this case it shouldnt
> even be a problem with it not being initialized as it is merely being
> registered for later use). The compiler I am using is MSVC 6.0 and (if
> you hadnt guessed) its a win 32 system - but I dont think that the OS
> is the problem here.
>
> How do I get around the inability to compile?
> - is it my lack of knowledge of C++ (I only recently have made the
> transition from C . Ouch. )
> - is it the compiler?
>
> I dont want to split the constructor up into several functions as this
> kind of violates the reasons for using C++ in the first place, and
> though I can force it to work by declaring the callback as a static I
> create other problems for myself elsewhere.
>
> much thanks to everyone for your help and a happy new year - Mathew


The Microsoft Windows "Window Procedure" function cannot be a nonstatic
member function. Make it either a static member function or a non-member
function.

See the first three items at
http://www.parashift.com/c++-faq-lit...o-members.html

They don't discuss your exact issue, but similar ones of the same concept.

-Mike


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem with depracated casting method (down casting) Wally Barnes C++ 3 11-20-2008 05:33 AM
A constructor calling another constructor (default constructor)? Generic Usenet Account C++ 10 11-28-2007 04:12 AM
call base class constructor from derived class constructor Rahul C++ 16 11-07-2007 03:40 PM
Calling base class constructor from derived class Copy constructor ali C++ 4 03-05-2007 09:15 AM
Invoking templatized base class constructor from templatized derived class constructor mrstephengross C++ 5 05-18-2005 07:12 PM



Advertisments