www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Help with Compiler Error

reply Brad Anderson <brad sankaty.dot.com> writes:
I'm getting an error from the compiler that I don't understand, and would 
appreciate any help.  The error is:

   'this' is required, but OS is not a base class of Decorations

The error is on the return OS.DefMDIChildProc() line.

decorations.d:
----------------------------
public class Decorations : Canvas {

     int callWindowProc (int msg, int wParam, int lParam) {
         return OS.DefMDIChildProc (handle, msg, wParam, lParam);
     }

}

os.d
----------------------------

class OS {

     int DefMDIChildProc (int hWnd, int Msg, int wParam, int lParam) {
         if (IsUnicode) return DefMDIChildProcW (hWnd, Msg, wParam, lParam);
         return DefMDIChildProcA (hWnd, Msg, wParam, lParam);
     }

}
May 22 2004
parent reply Mike Swieton <mike swieton.net> writes:
On Sun, 23 May 2004 00:30:24 -0500, Brad Anderson wrote:

 I'm getting an error from the compiler that I don't understand, and would 
 appreciate any help.  The error is:
 
    'this' is required, but OS is not a base class of Decorations
 
 The error is on the return OS.DefMDIChildProc() line.
 <SNIP>
I'm betting that the error is that DefMDIChildProc is not a static method, and you're calling it in a static context. That is a particularly bad error message, though. Mike Swieton __ I believe you should live each day as if it is your last, which is why I don't have any clean laundry because, come on, who wants to wash clothes on the last day of their life? - Anonymous kid, aged 15 (but may as well be me!)
May 22 2004
parent reply Brad Anderson <brad sankaty.dot.com> writes:
Making DefMDIChildProc() static in os.d didn't seem to help :(

BA

Mike Swieton wrote:

 On Sun, 23 May 2004 00:30:24 -0500, Brad Anderson wrote:
 
 
I'm getting an error from the compiler that I don't understand, and would 
appreciate any help.  The error is:

   'this' is required, but OS is not a base class of Decorations

The error is on the return OS.DefMDIChildProc() line.
<SNIP>
I'm betting that the error is that DefMDIChildProc is not a static method, and you're calling it in a static context. That is a particularly bad error message, though. Mike Swieton __ I believe you should live each day as if it is your last, which is why I don't have any clean laundry because, come on, who wants to wash clothes on the last day of their life? - Anonymous kid, aged 15 (but may as well be me!)
May 22 2004
parent reply Brad Anderson <brad dsource.dot.org> writes:
But making the method static AND making the class static did work.

Maybe we can get a better error message from the compiler.

Thanks, Mike.

BA

Brad Anderson wrote:
 Making DefMDIChildProc() static in os.d didn't seem to help :(
 
 BA
 
 Mike Swieton wrote:
 
 On Sun, 23 May 2004 00:30:24 -0500, Brad Anderson wrote:


 I'm getting an error from the compiler that I don't understand, and 
 would appreciate any help.  The error is:

   'this' is required, but OS is not a base class of Decorations

 The error is on the return OS.DefMDIChildProc() line.
 <SNIP>
I'm betting that the error is that DefMDIChildProc is not a static method, and you're calling it in a static context. That is a particularly bad error message, though. Mike Swieton __ I believe you should live each day as if it is your last, which is why I don't have any clean laundry because, come on, who wants to wash clothes on the last day of their life? - Anonymous kid, aged 15 (but may as well be me!)
May 23 2004
parent reply Mike Swieton <mike swieton.net> writes:
On Sun, 23 May 2004 23:36:40 -0500, Brad Anderson wrote:

 But making the method static AND making the class static did work.
 
 Maybe we can get a better error message from the compiler.
 
 Thanks, Mike.
 
 BA
Ok, I'll bite: what does static mean in the context of a class? Mike Swieton __ If I need a screwdriver and I select a hammer, I probably won't get anywhere and will eventually realize my error. The problem with software is that we are able to turn a hammer into a screwdriver. - Laurent Bossavit
May 23 2004
parent Brad Anderson <brad dsource.dot.org> writes:
It didn't work yesterday when I only made the method static, but things 
began to work as I did this:

public static class OS {

     static int DefMDIChildProc() {
         ...
     }

}

It didn't make much sense to me, but I tried it.  The spec says that 
static is only used on functions and data.  But I couldn't get the code 
to work unless I added it up by class.

Now, of course, after your post questioning this, I took out the static 
before class and it works fine.   So I must have had something else wrong.

BA



Mike Swieton wrote:
 On Sun, 23 May 2004 23:36:40 -0500, Brad Anderson wrote:
 
 
But making the method static AND making the class static did work.

Maybe we can get a better error message from the compiler.

Thanks, Mike.

BA
Ok, I'll bite: what does static mean in the context of a class? Mike Swieton __ If I need a screwdriver and I select a hammer, I probably won't get anywhere and will eventually realize my error. The problem with software is that we are able to turn a hammer into a screwdriver. - Laurent Bossavit
May 24 2004