delphi - Acces violation on instance variable -
i have 2 class. 1 abstract (xmlnodemanager) , concrete child xmlenpmanager. abstract class definition is:
type   txmlnodemanager = class     public       constructor create(aroot: ixmlnode); virtual; abstract;       function size(): integer;    protected       { sgy alias para strategy }       sgyiterator: integer;       sgyattributes: tstringlist;       sgyroot: ixmlnode;   end; and, subclass:
type   txmlenpmanager = class (txmlnodemanager)     public       constructor create(aroot: ixmlnode); override;   end; the constructor implemented in subclass, , have next code:
constructor txmlenpmanager.create(aroot: ixmlnode); begin   sgyiterator := 0;   sgyroot := aroot;   self.generateattribs; end; whereas size() method implemented in father:
function txmlnodemanager.size(): integer; begin   size := sgyroot.childnodes.count; end; when create instance of xmlenpmanager, , pass defined ixmlnode param, , send size() message. program fails (in execution time) acces violation on sgyroot.childnodes.count.
i next check:
function txmlnodemanager.size(): integer; begin   if (assigned(sgyroot))     showmessage('root assigned.')   else     showmessage('root not assigned ???'); end; show second alert. im newest in delphi, , suspect interface reference value, unlike objects. correct ?. how solves problem ? ideas ?.
edit: down-casting. have variable of type xmlnodemanager, initilize subclass of xmlnodemanager. this, correct ?. example:
// anode can instance of txmlenpmanager or subclass of txmlnodemanager. procedure txmlfilemanager.setcurrentnode(anode: txmlnodemanager);     begin       // xmcurrentnode of txmlnodemanager type       xmcurrentnode := anode;     end; 
if i'm not mistaken, should call inherited constructor constructor:
constructor txmlenpmanager.create(aroot: ixmlnode); begin   inherited create;   sgyiterator := 0;   sgyroot := aroot;   self.generateattribs; end; 
Comments
Post a Comment