Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con constructor de clase (https://www.clubdelphi.com/foros/showthread.php?t=93739)

ramonigimenez 07-02-2019 15:56:52

Problemas con constructor de clase
 
Hola amigos,

Soy nuevo con delphi y estoy intentando amigarme con el lenguaje.
Pero me encontre con un problema que no puedo resolver por mi falta de experiencia.
Defini una clase (Espero que este bien), pero cuando compilo me da un error que describo debajo

Código:

//DEFINIECION DE CLASE
TFuente=class(tObject)
  private
    fColorFondo: TColor;
    fFuente: TFont;
  public
    Constructor Create;
    destructor Destroy; override;
    Procedure SaveToStream(Const aDest:Tstream);
    Procedure LoadFromStream(Const aSource:TStream);
    procedure Assign(const aSource:TFuente);
    property Fuente:TFont read fFuente write fFuente;
    property ColorFondo:TColor read fColorFondo write fColorFondo;
    end;


 //ERROR QUE DEVUELVE
[DCC Error] untClasses.pas(5):[DCC Error] E2065 Unsatisfied forward or external declaration: 'TFuente.Create'

En la sección use utilizo
Código:

uses Classes, SysUtils, Graphics, Controls,Forms, Jpeg, gifimage,Windows,
System2

Supuse que el error me lo daba porque no llame a la clase System, pero si la agrego a use
me da este error
Código:

[DCC Error] untClasses.pas(5): E2004 Identifier redeclared: 'System'
Espero puedan ayudarme, muchas gracias

TOPX 07-02-2019 16:29:58

Cita:

Empezado por ramonigimenez (Mensaje 530576)
//ERROR QUE DEVUELVE
[DCC Error] untClasses.pas(5):[DCC Error] E2065 Unsatisfied forward or external declaration: 'TFuente.Create'

Hola,

El error dice que encontró la declaración del método Create, pero no encuentra la implementación.

¿Cómo está implementado ese constructor?
-

ramonigimenez 07-02-2019 17:02:45

Hola,
desbajo de la seccion "implementation"
cree estas funciones
Código Delphi [-]
{ Tfuente }

constructor Tfuente.Create;
begin
  fColorFondo:=clWhite;
  fFuente:=TFont.Create;
end;

procedure TFuente.Assign(const aSource: TFuente);
begin
  fFuente.Assign(asource.Fuente);
  fColorFondo:=aSource.ColorFondo;
end;

destructor Tfuente.Destroy;
begin
  fFuente.Free;
  inherited;
end;

procedure TFuente.LoadFromStream(const aSource: TStream);
begin
  fColorFondo:=ReadInt(aSource);
  fFuente.Name:=ReadStr(aSource);
  fFuente.Size:=ReadInt(aSource);
  fFuente.Color:=ReadInt(aSource);
  if ReadBool(aSource) then
    fFuente.Style:=fFuente.Style+[fsBold]
  else
    fFuente.Style:=fFuente.Style-[fsBold];
  if ReadBool(aSource) then
    fFuente.Style:=fFuente.Style+[fsItalic]
  else
    fFuente.Style:=fFuente.Style-[fsItalic];
  if ReadBool(aSource) then
    fFuente.Style:=fFuente.Style+[fsUnderline]
  else
    fFuente.Style:=fFuente.Style-[fsUnderline];
end;

procedure TFuente.SaveToStream(const aDest: Tstream);
begin
  WriteInt(aDest,fColorFondo);
  WriteStr(aDest,fFuente.Name);
  WriteInt(aDest,fFuente.Size);
  WriteInt(aDest,fFuente.Color);
  WriteBool(aDest,fsBold in fFuente.Style);
  WriteBool(aDest,fsItalic in fFuente.Style);
  WriteBool(aDest,fsUnderline in fFuente.Style);
end;
Lo que creo que esta haciendo es crear el constructor y las funciones que defini antes.

Al González 07-02-2019 17:30:35

¿Puedes mostrarnos el código completo de tu unidad .pas? Por cierto, se recomienda usar la etiqueta para código Delphi (el pequeño edificio griego de tres columnas ;)).

Por otro lado, el error "Identifier redeclared: 'System'" se debe a que la unidad System se incluye de forma implícita en cualquier aplicación Delphi. Es como un Uses System invisible; no debe ser incluida expresamente.

TOPX 07-02-2019 21:39:29

Cita:

Empezado por ramonigimenez (Mensaje 530578)
Hola,
desbajo de la seccion "implementation"
cree estas funciones
[sic]
Lo que creo que esta haciendo es crear el constructor y las funciones que defini antes.

A ese código no le veo problema, ¿es seguro que compila con el error que dice?

Pregunto, porque ensayé creando la unidad con su código y compila sin inconveniente, así:
Código Delphi [-]
unit untClasses;

interface

uses
  Classes, Graphics;

type
  TFuente = class(TObject)
    private
      fColorFondo: TColor;
      fFuente: TFont;
    public
      constructor Create;
      destructor Destroy; override;

      Procedure SaveToStream(const aDest: TStream);
      Procedure LoadFromStream(const aSource: TStream);
      procedure Assign(const aSource: TFuente);

      property Fuente: TFont read fFuente write fFuente;
      property ColorFondo: TColor read fColorFondo write fColorFondo;
  end;

implementation

{ TFuente }

procedure TFuente.Assign(const aSource: TFuente);
begin

end;

constructor TFuente.Create;
begin

end;

destructor TFuente.Destroy;
begin

  inherited;
end;

procedure TFuente.LoadFromStream(const aSource: TStream);
begin

end;

procedure TFuente.SaveToStream(const aDest: Tstream);
begin

end;

end.

Tip: Después de que escriba la declaración de un método, teniendo el cursor en esa línea puede oprimir Ctrl+Shift+C para que el IDE cree el cascarón de cada método en la sección implementation por Ud.
-

ecfisa 07-02-2019 23:54:42

Hola.

Coincido totalmente con TOPX.

El error
Cita:

[DCC Error] untClasses.pas(5):[DCC Error] E2065 Unsatisfied forward or external declaration: 'TFuente.Create'
indica que un método declarado en la clase (Create) no posee su correspondiente definición.

Sin embargo, el código presentado por ramonigimenez en el mensaje #3, define todos los métodos declarados dentro de la clase TFuente

Saludos :)

ramonigimenez 08-02-2019 20:07:11

Amigos,
Desde ya muchas gracias por el apoyo.
Por suerte solucione este problemita, seguire avanzando en el proyecto.


Cita:

Empezado por TOPX (Mensaje 530585)
Tip: Después de que escriba la declaración de un método, teniendo el cursor en esa línea puede oprimir Ctrl+Shift+C para que el IDE cree el cascarón de cada método en la sección implementation por Ud.
-

Muchas gracias por el tip lo tendre en cuenta.


Nuevamente a todos muchas gracias.


La franja horaria es GMT +2. Ahora son las 04:31:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi