class is forward referenced when looking for 'v'

Amber Thralll via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 29 16:09:15 PST 2015


I ran into an issue with cross referencing to classes, that I 
can't figure out.  I reproduced the issue below:

import std.stdio;

class Base(t)
{
	public void Foo(A!(t) a)
	{
		writeln("Base.Foo(A a)");
	}

	public void Foo(B!(t) a)
	{
		writeln("Base.Foo(B a)");
	}
};

class A(t) : Base!(t)
{
	public t v;
	this(t v)
	{
		this.v = v;
	}
}

class B(t) : Base!(t)
{
	public override void Foo(A!(t) a)
	{
		writeln("A: ", a.v);
	}
}

int main()
{
	A!int a = new A!(int)(1);
	B!int b = new B!(int)();

	a.Foo(b);
	b.Foo(a);

	return 0;
}

And the errors dmd returns:
test.d(16): Error: class test.A!int.A is forward referenced when 
looking for 'v'
test.d(16): Error: class test.A!int.A is forward referenced when 
looking for 'opDot'
test.d(16): Error: class test.A!int.A is forward referenced when 
looking for 'opDispatch'
test.d(29): Error: no property 'v' for type 'test.A!int.A'
test.d(10): Error: template instance test.B!int error 
instantiating
test.d(16):        instantiated from here: Base!int
test.d(35):        instantiated from here: A!int

Is this a bug in D?  Or am I doing something wrong?


More information about the Digitalmars-d-learn mailing list