我先是定义类
type
    TMyRect=class
    private
      px0,py0,px1,py1,px,py:Integer;
    public
      class procedure setRect(x0,y0,x1,y1:Integer);
    end;
.......然后定义方法
class procedure TMyRect.setRect(x0,y0,x1,y1:Integer);
begin
   px0:=x0;
   py0:=y0;
   px0:=x1;
   py1:=y1;
end;可是编译的时候,报错“Instance variable 'px0' inaccessible here”,为什么呀?呜呜

解决方案 »

  1.   

    我不是在类的事件中赋值的嘛?
    class procedure TMyRect.setRect(x0,y0,x1,y1:Integer);
    begin
       px0:=x0;
       py0:=y0;
       px0:=x1;
       py1:=y1;
    end;
      

  2.   

    你定义的是类方法:类方法就是作用于类而不是作用于对象的方法(除构造器外)。类方法的定义必需以保留字class开始。例如,type  TFigure = class  public    class function Supports(Operation: string): Boolean; virtual;    class procedure GetInfo(var Info: TFigureInfo); virtual;    ...  end;类方法的定义声明也必需以保留字class开始。例如,class procedure TFigure.GetInfo(var Info: TFigureInfo);begin  ...end;在类方法的定义声明中,标识符Self表示方法被调用处的类(可以是方法定义所在的类的后裔类)。如果在类C中调用类方法,那么Self就是类C的类型。因此,这时不能用Self对域、属性和一般的对象方法进行访问,但可以用它调用构造器和其他的类方法。类方法可以通过类引用或对象引用被调用。当类方法通过对象引用被调用时,对象的类成为Self的值。
      

  3.   

    靠,不会procedure 前真有个class吧?
      

  4.   

    :<~~~~~~~~~
    那我不是定义了类方法了吗?前面有class呀?为什么还是编译出错呀?
      

  5.   

    简单的说,我应该如何给private变量px0,py0等通过类里面的方法赋值呢?就像c++或java中一样的
      

  6.   

    你可以定义一个类变量MyRect
    var
      MyRect : TMyRect;
    .....
    class procedure TMyRect.setRect(x0,y0,x1,y1:Integer);
    begin
       MyRect.px0:=x0;
       MyRect.py0:=y0;
       MyRect.px0:=x1;
       MyRect.py1:=y1;
    end;