GARANTIR DESCONTO

Fórum Erro estranho no Create de uma Classe. #342297

24/05/2007

0

Olá amigos, estou fazendo uma classe.

segue pedaços dela:

unit uAreaLoc;

interface

uses
  Classes, Windows, Messages, SysUtils, Variants, Controls, Forms;


  TAreaLoc = class(TObject)
  private
    AreaMem: TArea;
  protected

  public
    Area: TArea;
    constructor Create;
    destructor Destroy; override;
    function UseArea(NumArea: integer): Boolean;

  published

  end;

implementation

{ TAreaLoc }

constructor TAreaLoc.Create;
begin
  inherited;
  AreaMem.Create;
end;

destructor TAreaLoc.Destroy;
begin
  AreaMem.Free;

  inherited;
end;


Pois bem, ao compilar dá o seguinte erro:

[Pascal Error] uAreaLoc.pas(61): E2003 Undeclared identifier: ´Create´
[Pascal Error] uAreaLoc.pas(61): E2003 Undeclared identifier: ´Free´

Porque está acontecendo isso?

Desde já agradeço

[]s


Titanius

Titanius

Responder

Posts

24/05/2007

Massuda

Como é definida a classe TArea? Qual é a linha 61?


Responder

Gostei + 0

24/05/2007

Titanius

Foi mal massuda, as linhas em questão são:

constructor TAreaLoc.Create;
begin
inherited;
AreaMem.Create; <<-- Linha 61
end;

destructor TAreaLoc.Destroy; <<-- Linha 66
begin
AreaMem.Free;

inherited;
end;

Na verdade o erro é este:

[Pascal Error] uAreaLoc.pas(61): E2003 Undeclared identifier: ´Create´
[Pascal Error] uAreaLoc.pas(66): E2003 Undeclared identifier: ´Free´

Só tem isso...

Segue a classe completa:
unit uAreaLoc;

interface

uses
  Classes, Windows, Messages, SysUtils, Variants, Controls, Forms;

const
    (* É a constante que tem o total máximo de campos na área do localizar. *)
  MaxCampo = 50;

type
  TTipoDados = (tdText, tdCheckBox, tdNumeric, tdDate);

  TConfCampo = record
    Mascara: string[30];
    CanSelect: boolean; // Se TRUE deixa localizar pelo campo
    Params: TStringList;
    IsFK: Boolean;
    FKCampo: string[30];
  end;

  TCampo = record
    TipoCol: TTipoDados;
    Tamanho: integer;
    NomeCampo: string[50];
    ConfCampo: TConfCampo;
  end;

  TArea = record
    Titulo: string;
    SQL: string;
    CampoIndice: string;
    CampoLocalizar: string;
    Tabela: string;
    Campos: array[0..MaxCampo] of TCampo;
  end;

  TAreaLoc = class(TObject)
  private
    AreaMem: TArea;
  protected

  public
    Area: TArea;
    constructor Create;
    destructor Destroy; override;
    function UseArea(NumArea: integer): Boolean;

  published

  end;

implementation

{ TAreaLoc }

constructor TAreaLoc.Create;
begin
  inherited;
  AreaMem.Create;
end;

destructor TAreaLoc.Destroy;
begin
  AreaMem.Free;

  inherited;
end;

function TAreaLoc.UseArea(NumArea: integer): Boolean;
begin
  case NumArea of
    0:
      begin
        AreaMem.Titulo := ´´;
        AreaMem.SQL := ´´;
        AreaMem.CampoIndice := ´´;
        AreaMem.CampoLocalizar := ´´;
        AreaMem.Tabela := ´´;

      end;

  end;

  Area := AreaMem;
end;

end.



Responder

Gostei + 0

24/05/2007

Massuda

TArea é um [b:a384530f89]record[/b:a384530f89], o que significa que ele não tem Create nem Destroy, pois não é uma classe. A partir do D2006 records podem ter métodos, mas não suportam construtores nem destrutores; isso acontece porque records não são alocados dinamicamente na memória (a não ser que você faça isso explicitamente).


Responder

Gostei + 0

24/05/2007

Titanius

Valeu Massuda!

[]s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar