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

Alex Rønne Petersen xtzgzorex at gmail.com
Tue Jan 17 05:16:10 PST 2012


On 17-01-2012 12:23, Matej Nanut wrote:
> I will try to remove all snippets in my code that aren't relevant but still
> exhibit the issue, when I find the time. What I forgot to mention is that
> this error appeared when I did some so-called "refactoring"; I moved a
> nested class out of its parent, since I wanted it visible on the outside.
>
> I moved it back now and reference it by Parent.Child.<stuff>, which is
> just as good, and the error isn't there anymore, but I still don't understand
> it. I must have missed some variable renaming or something. Or I was
> just plain sloppy. As mentioned I will post a complete snippet with the
> error sometime until friday.
>
> On 17 January 2012 02:33, Timon Gehr<timon.gehr at gmx.ch>  wrote:
>> On 01/17/2012 12:49 AM, Matej Nanut wrote:
>>>
>>> Hey everyone,
>>>
>>> I, once again, have a problem with an error I can't seem to figure out!
>>>
>>> The situation:
>>> - a class, inherited by five other classes;
>>> - the class having a static function which returns one
>>>    if its subclasses depending on the input of a string.
>>>
>>> Something like this:
>>>
>>> class Node
>>> {
>>>    static Node parse(ref string s)
>>>    {
>>>      /* Get value to switch by, an enum. */
>>>      auto switchable = /* ... */;
>>>      final switch (switchable)
>>>      {
>>>        case Blah.one: return new OneNode(s);
>>>        case Blah.two: return new TwoNode(s);
>>>      /* ... */
>>>      }
>>>    }
>>> }
>>>
>>> And I get the mentioned error. I don't understand it:
>>> is it saying I'm using `this' in a static member function
>>> called `parse'? Am I insane; where am I referencing it?
>>>
>>> The other classes are in this form:
>>>
>>> class OneNode : Node
>>> {
>>>    /* ... stuff ... */
>>>    this(ref string s)
>>>    {
>>>      /* Does stuff with `s'. */
>>>    }
>>> }
>>>
>>> Do you need more information?
>>>
>> Yes; It is extremely hard to solve the problem when there is no code snippet
>> given which exhibits the problematic behavior in question.
>>

DustMite is good for making test cases: 
https://github.com/CyberShadow/DustMite

-- 
- Alex


More information about the Digitalmars-d-learn mailing list