[fpc-pascal] why can't we define class operator for old fashion object type, but ok for 'advanced record' type?

Michael Van Canneyt michael at freepascal.org
Wed Aug 15 11:17:56 CEST 2018



On Wed, 15 Aug 2018, Dennis wrote:

>
>
> Michael Van Canneyt wrote:
>>
>>
>> On Wed, 15 Aug 2018, Dennis wrote:
>>
>>> I was trying to use a generic class TDictionary<T>  with type T. This 
>>> class has a method that compares a variable of T with another one.
>>>
>>> When I specialize a class using this TDictionary with a type:
>>>
>>> TSecurity = object
>>>   ....
>>> end;
>>>
>>>
>>> e.g. TNewDict = class(TDictionary<String, TSecurity>);
>>>
>>> it raise a compiler complaining that my TSecurity type has no 
>>> operator = defined.
>>>
>>> But when I try to add like this:
>>>
>>> TSecurity = object
>>>   ....
>>> class operator =  (constref aLeft, aRight: TSecurity ): Boolean; 
>>> //<---compiler Error: Procedure or Function expected
>>>
>>> end;
>>
>> Did you try creating an "old-fashioned" = operator ?
>>
>> Something like
>>
>> Operator = (l,r : TSecurity) z : boolean;
>>
>> begin
>>   // compare here
>> end;
>>
>
> Just tried.
> It complained:   Fatal: Syntax error, "IMPLEMENTATION" expected but 
> "identifier OPERATOR" found

Following works here:

Prograp testo;

Type
   TSecurity = Object
     a,b : Integer;
   end;

Operator = (l,r : TSecurity) z : boolean;

begin
   Z:=(l.a=r.a) and (L.b=r.b);
end;

begin
end.

But maybe you are using mode delphi ? If so, try separating out the object
definition in a separate unit which is not compiled in delphi mode.

Michael.


More information about the fpc-pascal mailing list