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

Chad J gamerChad at _spamIsBad_gmail.com
Fri May 4 19:25:53 PDT 2007


Myron Alexander wrote:
> 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.

Ah, makes sense.  I figured out what I was doing wrong in the original 
code.  Thanks.


More information about the Digitalmars-d-learn mailing list