如果我用’procedure’替换这个对象中的’constructor’,那么它编译好了,但是为什么这样,这是我的代码中的一个好的改变,即它是一个不会对功能?
unit Affinetransform;interfacetype { Rectangular area. } TCoordRect = object public left,top,Right,Bottom: Real; constructor CreatePos(Aleft,Atop,ARight,ABottom: Real); procedure Include(AX,AY: Real); end;implementationconstructor TCoordRect.CreatePos(Aleft,ABottom: Real);begin left := Aleft; top := Atop; Right := ARight; Bottom := ABottom;end;procedure TCoordRect.Include(AX,AY: Real);begin CreatePos(AX,AY,AX,AY)end;end.解决方法 对于这个传统的Turbo Pascal样式对象,关键字构造函数实际上没有任何意义.虽然对象构造函数确实有一些特殊处理,但这里绝对没有必要.这里有什么只不过是一些方法的记录.
XE3编译器已更改,因此它不再允许您在实例方法内调用Self上的构造函数.类和对象都是这种情况.我没有看到任何关于为何进行此更改的文档.毫无疑问它会及时渗出.
您的直接解决方案是用过程替换构造函数.从长远来看,将其转化为记录而不是对象是有意义的.
我还会理解您将方法的名称更改为Initialize.一些图书馆设计师似乎选择在他们的记录上使用Create和Free方法.这导致了大量的代码编写如下:
ctx := TRttiContext.Create;try ....finally ctx.Free;end;
事实上,所有代码都是虚假的,可以简单地删除! TRttiContext变量将自动初始化自身.
这种设计也为那些喜欢使用FreeAndNil的Delphi程序员设置了一个巨大的Heffalump Trap.将记录传递给FreeAndNil会导致一些有趣的烟火!
总结以上是内存溢出为你收集整理的为什么Delphi XE3给出“E2382无法使用实例变量调用构造函数”?全部内容,希望文章能够帮你解决为什么Delphi XE3给出“E2382无法使用实例变量调用构造函数”?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)