no property 'opCall' for type ... what am I doing wrong?

Myron Alexander dprogramming at myronRMVETHISalexander.com
Fri May 4 18:50:44 PDT 2007


Chad J wrote:
> main.d:
> import std.stdio;
> 
> struct A
> {
>   int member1;
> }
> 
> struct B
> {
>   int member2;
> }
> 
> void main()
> {
>   A a;
>   writefln( (cast(B)a).member2 );
> }
> 
> That code results in the following compiletime errors:
> main.d(16): Error: no property 'opCall' for type 'B'
> main.d(16): Error: function expected before (), not 1 of type int
> main.d(16): Error: no property 'member2' for type 'int'
> 
> I am using DMD 1.014 on Windows.
> This seemed to work at some point in history, but not anymore.  What am 
> I doing wrong?
> 
> Thanks

Chad,

What you are doing there is illegal code. The structs A and B are 
distinct types and cannot be cast to each other. If it worked in the 
past, then it was probably a compiler bug.

Since structs do not allow for inheritance (they are value types), then 
the only way would be to use classes and inheritance or templates.

What are you trying to achieve? Perhaps I can try to suggest a different 
method.

Regards,

Myron.


More information about the Digitalmars-d-learn mailing list