Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: BlackZeroX en 24 Marzo 2012, 04:36 am



Título: [Delphi] Error en acceder a una variable privada de una Clase.
Publicado por: BlackZeroX en 24 Marzo 2012, 04:36 am
Por que me marca error SIEMPRE cuando trato de dimensionar o acceder a la variable udtArray?

Código
  1.  
  2. type
  3.  TValue = record
  4.    iFlags: Integer;
  5.    fValue: real;
  6.  end;
  7.  
  8.  TArrayValue = Array Of TValue;
  9.  
  10.  TPila = class(TObject)
  11.  private
  12.    udtArray: TArrayValue; // Array Of TValue
  13.  public
  14.    constructor Create(); overload;
  15.    constructor Create(var oPila: TPila); overload;
  16.    procedure Push(udtVar: TValue); overload;
  17.    procedure Push(fValue: Real; iFlags: Integer); overload;
  18.    function Pop(): TValue;
  19.    function Count(): Integer;
  20.    function Get(Index: Integer): TValue;
  21.    procedure Invert();
  22.    procedure Clear();
  23.    procedure Clone(var oPila: TPila);
  24.  end;
  25.  
  26. implementation
  27.  
  28. constructor TPila.Create();
  29. begin
  30.  Self.Clear;
  31. end;
  32.  
  33. constructor TPila.Create(var oPila: TPila);
  34. begin
  35.  Self.Clone(oPila);
  36. end;
  37.  
  38. procedure TPila.Push(fValue: Real; iFlags: Integer);
  39. var
  40.  iLength: Integer;
  41.  iIndex: Integer;
  42. begin
  43.  iIndex := Self.Count;
  44.  iLength := (iIndex + 1);
  45.  SetLength(Self.udtArray, iLength);
  46.  udtArray[iIndex].iFlags := iFlags;
  47.  udtArray[iIndex].fValue := fValue;
  48. end;
  49.  
  50. procedure TPila.Push(udtVar: TValue);
  51. begin
  52.  Push(udtVar.fValue, udtVar.iFlags);
  53. end;
  54.  
  55. function TPila.Pop(): TValue;
  56. var
  57.  iNewLength: Integer;
  58.  udtRet: TValue;
  59. begin
  60.  if (Self.Count = 0) then begin
  61.    udtRet.iFlags := 0;
  62.    udtRet.fValue := 0;
  63.  end else begin
  64.    iNewLength := High(Self.udtArray);
  65.    udtRet := Self.udtArray[iNewLength];
  66.    SetLength(Self.udtArray, iNewLength);
  67.  end;
  68.  Result := udtRet;
  69. end;
  70.  
  71. function TPila.Count(): Integer;
  72. begin
  73.  Result := Length(Self.udtArray);
  74. end;
  75.  
  76. procedure TPila.Invert();
  77. var
  78.  i: Integer;
  79.  j: Integer;
  80. begin
  81.  if not (Count = 0) then begin
  82.    j := High(Self.udtArray);
  83.    for i:= Low(Self.udtArray) to (High(Self.udtArray) div 2) do begin
  84.      SwapFloat(Self.udtArray[i].fValue, Self.udtArray[j].fValue);
  85.      SwapInt(Self.udtArray[i].iFlags, Self.udtArray[j].iFlags);
  86.      j := (j - 1);
  87.    end;
  88.  end;
  89. end;
  90.  
  91. function TPila.Get(Index: Integer): TValue;
  92. var
  93.  udtRet: TValue;
  94. begin
  95.  if (Index < Self.Count) then begin
  96.    udtRet := Self.udtArray[Index];
  97.  end else begin
  98.    udtRet.iFlags := 0;
  99.    udtRet.fValue := 0;
  100.  end;
  101.  Result := udtRet;
  102. end;
  103.  
  104. procedure TPila.Clear();
  105. begin
  106.  SetLength(Self.udtArray, 0);
  107. end;
  108.  
  109. procedure TPila.Clone(var oPila: TPila);
  110. begin
  111.  oPila.udtArray := Self.udtArray;
  112. end;
  113.  


Título: Re: [Delphi] Error en acceder a una variable privada de una Clase.
Publicado por: BlackZeroX en 24 Marzo 2012, 04:46 am
jejejeje... Perdón Error Mio al crear la clase... tenia que hacer esto:

oPila := TPila.Create;

Dulces Lunas!ˇ.