On Fri, 14 May 2010, Graeme Geldenhuys wrote:

Hi,

I tried using FPC 2.5.1 today to see how compatible is our application with
it compared to FPC 2.4.1

I got stacks of the following errors.  Why is this change forced in FPC
2.5.1?  TBulkInvoiceRateListForm class is a descendant of TfpgWindowBase so
there should be a problem. I don't understand. :-/

-------------
frm_bulkinvoiceratelist.pas(84,77) Error: Call by var for arg no. 2 has to
match exactly: Got "TBulkInvoiceRateListForm" expected "TfpgWindowBase"
fpg_base.pas(2207,31) Hint: Found declaration:
TfpgApplicationBase.CreateForm(TComponentClass,out TfpgWindowBase);
frm_bulkinvoiceratelist.pas(307) Fatal: There were 1 errors compiling
module, stopping
--------------------


To get my code to compile again, I have to change the following code from

fpgApplication.CreateForm(TBulkInvoiceRateListForm, BulkDiscountListForm);

...to this...

fpgApplication.CreateForm(TBulkInvoiceRateListForm,
   TfpgWindowBase(BulkDiscountListForm));

Now I have to include ugly casts all over the place. :-(


I got similar issues with TStrings and TStringList. TStringList is a
descendant of TStrings, but I can't pass a TStringList type as a parameter
to a method declared with TStrings.


Maybe I don't understand the var parameter correctly (but haven't tested to
see what happens if I remove var from parameter list). If I have a class
instance, when should I pass it to a method or function/procedure as var
and when don't I need to use var parameters?

You only need var/out when you want to change the instance pointer, i.e. switch to another instance. And I count FreeAndNil() among this. (.Free
on the other hand is still possible, but not recommended).

If  you just want to set properties or call methods on an existing instance,
there is no need to use out or var.

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to