@property not available for classes?

John via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 1 02:23:36 PST 2016


On Friday, 1 January 2016 at 10:14:58 UTC, Shriramana Sharma 
wrote:
> Hello. I'm trying the following code:
>
> import std.stdio;
> class TimeSpan
> {
>     immutable double start, end;
>     @property double length() { return end - start; }
> }
> void main()
> {
>     auto p = TimeSpan(1, 2);
>     writeln(p.length);
> }
>
> ...and I'm getting the error:
>
> Error: no property 'opCall' for type '<src>.TimeSpan'
>
> If I change the class to struct the @property is callable 
> without parens but I need TimeSpan to be a class since I need 
> to inherit from it.
>
> http://dlang.org/property.html and 
> http://dlang.org/spec/function.html#property-functions don't 
> say anything about @property not being applicable for classes.
>
> Am I stuck with having to use the () for this even in D?

The error is actually referring to the lack of a suitable 
constructor. It thinks TimeSpan should define opCall because of 
the way you're trying to create an instance your main function. 
It's nothing to do with the @property attribute. So you need to 
define a constructor. Also, use "new" when creating instances.

Alternatively, make it a struct and it will work as is without 
further changes.


More information about the Digitalmars-d-learn mailing list