However if we would put it on true, it would probably work but we would get the XS1558 error again in InitializeComponent, so this would not help us.
Here is the code:
CLASS DBServerKL INHERIT DBServer
method Close() class DBServerKl
if nDBTeller > 0
method Commit() class DBServerKl
local lOk as logic
// dbg(str( self:recno))
//LOGGZ("Commit",self:Name+": Commit op EOF record", cMedewerker, cDatapath)
lOk := super:Commit()
if !lOk //niet gelukt ?
LOGGZ("Commit",self:Name+": Commit niet gelukt. Status onbekend", cMedewerker, cDatapath)
LOGGZ("Commit",self:Name+": Commit niet gelukt: "+self:STATus:description, cMedewerker, cDatapath)
LOGGZ("Commit",self:Name+": Rlock niet gelukt. Status onbekend", cMedewerker, cDatapath)
LOGGZ("Commit",self:Name+": Rlock niet gelukt: "+self:STATus:description, cMedewerker, cDatapath)
(more unrelated methods that do seem to get inherited fine here)
The root of this problem is that it is not possible for the compiler to know if you mean to define a method without argument as a CLIPPER or STRICT calling convention method. For methods with parameters:
METHOD TestStrict(n AS INT , s AS STRICT)
METHOD TestClipper(n , s)
it is obvious that the first one is strongly typed (STRICT), but the other has CLIPPER calling convention.
By default the compiler treats parameterless methods as STRICT, because this is the modern/safer/faster way, unless you use the implicit clipper compiler option.
But CLIPPER and STRICT methods are considered as completely different methods (which just happen to have the same name), so you get the compiler error, because it does not make sense (and can cause problems) to override a CLIPPER method with a STRICT one and vice versa. In VO, there is no such issue, because VO does not support method overloading at all.
Anyway, after explaining the matter more deeply, fortunately the solution is simple, just declare the calling convention (CLIPPER) explicitly:
Glad it works now! CLIPPER calling convention just means that parameters are not typed (as it was in Clipper), you can actually pass more or less params when calling the method than the number of params the method defines etc and it is what VO uses by default, too. Of curse there's no compile time checking for CLIPPER methods, which makes them more error prone, but they are necessary for compatibility with VO (and other Clipper dialects) code.