[Audacity-devel] Re: commands.h leads to compile errors on linux
A free multi-track audio editor and recorder
Brought to you by:
aosiniao
From: Hermann <her...@ui...> - 2002-03-22 08:17:05
|
hello > From: Shane Mueller <smu...@um...> > I'm having trouble compiling a clean cvs checkout on linux. Using gcc > 2.95.4, I get the following errors when it reaches commands.h: > > commands.h: In method `void AudacityProject::CreateMenuBar()': > commands.h:132: non-lvalue in unary `&' > commands.h:138: non-lvalue in unary `&' > commands.h:144: non-lvalue in unary `&' > .....<output truncated> > > These problem lines all use the following macro: > > #define CMD_CACFUNC(a) ( (wxObjectEventFunction > *)memcpy(malloc(sizeof(wxObjectEventFunction)), &(&a), > sizeof(wxObjectEventFunction)) ) > > I presume this has something to do with something that VC++ is forgiving > about but gcc isn't, maybe in relation to wxWindows > wxObjectEventFunction. Has anyone else seen this problem (the file has > been around about 3 days)? Yes I had the very same problem. > I played with the code a little but couldn't figure out a fix, although > I think it probably stems from the &(&a) part: It is definitely this part. I searched the web and found something in the line of: unary operator & requires an lvalue. but (&a) is not an lvalue (at least not for g++ :-) My solution was to "craft" a function that replaces "&(&a)" by producing an lvalue inside of the function an returning it. this is what I added at the top of Menu.cpp void *pmf_to_vp(void (AudacityProject::* pmf)(wxCommandEvent &)) { void *vp = &pmf; return vp; } in commands.h I replaced "&(&a)" in the CMD_CACFUNC-definition with "pmf_to_vp(&a)". :-( this is ugly. I guess there is quite a simple solution to this problem, but I did not manage to find one... hermann |