www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Compiler bug?

reply apz28 <home home.com> writes:
abstract class A
{
	string _s;
	
 property:
	final string s()
	{
		return _s;
	}
	
	A s(string x)
	{
		_s = x;
		return this;
	}
}

class B : A
{
 property:
	final override A s(string x)
	{
		_s = x;
		return this;
	}
}
	
void main()
{
	B b = new B();
	b.s = "abc";
	assert(b.s == "abc");
}

Compilation output
/d536/f408.d(32): Error: function f408.B.s (string x) is not 
callable using argument types ()
Aug 15 2017
next sibling parent Daniel Kozak via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> writes:
No it is not a bug, there is no s() in B, you can fix this by adding:

alias s = A.s;

to class B

On Wed, Aug 16, 2017 at 7:21 AM, apz28 via Digitalmars-d-learn <
digitalmars-d-learn puremagic.com> wrote:

 abstract class A
 {
         string _s;

  property:
         final string s()
         {
                 return _s;
         }

         A s(string x)
         {
                 _s = x;
                 return this;
         }
 }

 class B : A
 {
  property:
         final override A s(string x)
         {
                 _s = x;
                 return this;
         }
 }

 void main()
 {
         B b = new B();
         b.s = "abc";
         assert(b.s == "abc");
 }

 Compilation output
 /d536/f408.d(32): Error: function f408.B.s (string x) is not callable
 using argument types ()
Aug 15 2017
prev sibling parent Daniel Kozak via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> writes:
and some doc:
http://dlang.org/spec/function.html#function-inheritance

On Wed, Aug 16, 2017 at 7:45 AM, Daniel Kozak <kozzi11 gmail.com> wrote:

 No it is not a bug, there is no s() in B, you can fix this by adding:

 alias s = A.s;

 to class B

 On Wed, Aug 16, 2017 at 7:21 AM, apz28 via Digitalmars-d-learn <
 digitalmars-d-learn puremagic.com> wrote:

 abstract class A
 {
         string _s;

  property:
         final string s()
         {
                 return _s;
         }

         A s(string x)
         {
                 _s = x;
                 return this;
         }
 }

 class B : A
 {
  property:
         final override A s(string x)
         {
                 _s = x;
                 return this;
         }
 }

 void main()
 {
         B b = new B();
         b.s = "abc";
         assert(b.s == "abc");
 }

 Compilation output
 /d536/f408.d(32): Error: function f408.B.s (string x) is not callable
 using argument types ()
Aug 15 2017