[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