Error: 'this' is only defined in non-static member functions, not main

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 29 15:12:36 PDT 2015


On Wednesday, 29 July 2015 at 21:33:16 UTC, remi thebault wrote:
> Hello
>
> I have this weird error trying to achieve something simple:

That's far from simple.

Here's a reduction:

----
template wl_container_of(alias member)
{
     size_t get() {return member.offsetof;}
}

struct item { int link; }

void main()
{
     wl_container_of!(item.link).get(); /* Error: 'this' is only 
defined in non-static member functions, not main */
}
----

I'm not sure what's going on here, if this should or shouldn't 
work. The error message isn't exactly good.

Slapping `static` on `get` seems to make it work:
----
     static size_t get() {return member.offsetof;}
----

I guess the compiler thinks that since `item.link` is an instance 
member, it needs a `this`. And then `get` would need a `this` too 
as it's using `item.link` via `member`. When the compiler sees 
that there is no `this`, it errors out.

An explicit `static` forces the compiler to assume no `this`. And 
it would error out if you actually tried to make use of it.

Naively, I'd think the compiler should be able to figure that out 
itself.


More information about the Digitalmars-d-learn mailing list