Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema Definiendo Clase en Free Pascal (https://www.clubdelphi.com/foros/showthread.php?t=45888)

gerupc 17-07-2007 19:13:53

Problema Definiendo Clase en Free Pascal
 
Hola,

mirad tengo un problema al definir una clase, el código es el siguiente:

Código Delphi [-]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Tusuario = class;                      
    Nombre: string;                      
    Apellidos: string;                  
    Edad: integer;
    Socio: boolean;
    Codigo_Socio: integer;
    procedure Mostrar_Tusuario;
  end;

procedure Mostrar_Tusuario;
  Begin
      Writeln('Nombre: ', Nombre);
      Writeln('Apellidos: ', Apellidos);
      Writeln('Edad: ', Edad);

      if Socio = True then
      write('Si');
        else if Socio = False then
        write('No')
      else
      write('No es socio, ¡¡¡¡LADRON!!!! ');

      Writeln('Socio: ', Socio);
      Writeln('Codigo de Socio: ', Codigo_Socio);

var
  Geru: Tusuario                        
                                       
begin
  Geru := Tusuario.create;
  Geru.Nombre := 'Geru';
  Geru.Apellidos := 'García Blas';
  Geru.Edad := 21;
  Geru.Socio := True;
  Geru.Codigo_Socio := 01;
  Geru.Mostrar_Tusuario;
end.

Lo he probado tanto en FreePascal como en Delphi 7, el error en FPC es el siguiente:

First compilation of c:\fpc\proyectos en pascal\project2.pas
project2.pas(9,14) Error: Identifier not found "class"
project2.pas(9,14) Fatal: You need objFp(-S2) or Delphi (-Sd) mode to compile this module
project2.pas(9,14) Fatal: Compilation aborted

Y en Delphi 7 pues más de lo mismo.

Ya de paso una cosilla más ;), al definir como tipo de datos 'REAL' me aparece el siguiente resultado (Por ejemplo);

1.256500000000000000E+001 {Siendo el resultado. 12.56}

Un saludo, y gracias de antemano.

Geru.



seoane 17-07-2007 19:26:33

:confused: No te sobra este punto y coma:
Código Delphi [-]
Tusuario = class;

gerupc 17-07-2007 19:31:19

Holal,

gracias por contestar, ya lo he quitado, he vuelto a compilar con el Free Pascal...y exactamente el mismo error.

Un saludo,

Geru.

roman 17-07-2007 19:50:09

Yo no sé si tenga que ver o no, pero es que hay varios errores en el código que presentas.

1. El procedimiento MostrarUsuario debe implementarse así:

Código Delphi [-]
procedure TUsuario.Mostrar_Tusuario;
begin
  ...
end;

2. Hay un ; antes de un else, que no debe ir.

3. Falta un ; en

Código Delphi [-]
var
  Geru: Tusuario

Entonces, ¿qué tal si corriges primero todo eso y ya luego vemos? Porque en FreePascal no sé, pero en Delphi sí o sí debe compilar eso.

// Saludos

dec 17-07-2007 19:52:47

Hola,

Yo lo que veo "raro" (luego de lo que comenta Seoane) es que estás definiendo una clase que cuenta con un método, pero, no implementas dicho método correctamente.

¿Dónde acaba? No acaba. Además parece que quieras usar en su interior varios miembros de la clase "TUsuario", pero, el procedimiento "Mostrar_Tusuario" no pertenece a dicha clase y no tendrá acceso a los miembros de esta así como así.

El asunto tendría que quedar más o menos así:

Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TUsuario = class
    procedure Mostrar();
  end;

{ TUsuario }

procedure TUsuario.Mostrar();
begin
  // Aquí muestras lo que sea
end;

var
  Usuario: TUsuario;

begin
  Usuario := TUsuario.Create();
  try
    // Aquí usas a Usuario
  finally
    Usuario.Free();
  end;
end.

Edito: Se me ha adelantado Román. :)

seoane 17-07-2007 19:52:52

Bueno, el codigo tiene unos cuantos errores de sintaxis.

Si le lavabamos la cara un poco nos queda esto, que si compila en Delphi 7:
Código Delphi [-]
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TUsuario = class
  public
    Nombre: String;
    Apellidos: String;
    Edad: Integer;
    Socio: Boolean;
    Codigo_Socio: Integer;
    procedure Mostrar;
  end;

procedure TUsuario.Mostrar;
begin
  Writeln('Nombre: ', Nombre);
  Writeln('Apellidos: ', Apellidos);
  Writeln('Edad: ', Edad);
  if Socio = True then
    Write('Si')
  else
    Write('No es socio, ¡¡¡¡LADRON!!!! ');
  Writeln('Socio: ', Socio);
  Writeln('Codigo de Socio: ', Codigo_Socio);
end;

var
  Geru: TUsuario;
                                       
begin
  Geru := TUsuario.create;
  Geru.Nombre := 'Geru';
  Geru.Apellidos := 'García Blas';
  Geru.Edad := 21;
  Geru.Socio := True;
  Geru.Codigo_Socio := 01;
  Geru.Mostrar;
  Geru.Free;
  Readln;
end.

Por otro lado, el problema en freepascal puede que sea que las opciones del compilador no son correctas.

seoane 17-07-2007 19:54:35

:D :D :D Vaya, esto si que es sincronización

dec 17-07-2007 19:58:25

Hola,

Je, je, je... pues yo no me quedo con la gana de añadir algo: me convence más si se implementa la clase "TUsuario" en una unidad aparte. ¿Por qué? Bueno... tal vez para ganar en legilibilidad solamente, pero, creo que merece la pena aunque fuera sólo por esto. :)

gerupc 17-07-2007 20:02:25

Aupi,

Muchas gracias, ahora lo he compilado en Delphi 7 y todo perfecto.
De todas maneras en Free Pascal me sigue dando guerra...sabes si es por que no soporta orientación a objetos o algo así??

Gracias, de veras y un saludo;

Geru.

seoane 17-07-2007 20:12:06

Si te fijas en el mensaje de error:
Cita:

project2.pas(9,14) Fatal: You need objFp(-S2) or Delphi (-Sd) mode to compile this module
Veras que te dice lo que pasa y como solucionarlo. -S2 y -Sd son parámetros del compilador, usalos en la linea de comandos a la hora de compilar.

gerupc 17-07-2007 20:39:07

Ya lo siento, pero soy un poco novato...:o asi que no se cómo se hace.

¿Cómo podría hacerlo?

Muchas gracias y un saludo,

Geru.

gerupc 18-07-2007 04:08:37

Hola,

lo he conseguido añadiendo:

Código Delphi [-]
 
{$MODE DELPHI}

Una cosita más, las variables que declaro del tipo 'real', el resultado me aparece con el siguiente formato:

Por ejemplo: 1.256500000000E+001

Qué puedo hacer?

Un saludo, Gracias.


Geru.

Ñuño Martínez 18-07-2007 10:00:29

Deberías utilizar la función Format de la unidad 'sysutils'. Por ejemplo:
Código Delphi [-]
Texto := Format ('Valor: %.2G', [NumeroReal]);
que devolverá "Valor: 1.2565".

gerupc 18-07-2007 19:20:00

Hola nuño,

siento ser tan 'torpe' , pero no sé cómo me dices, he probado y no consigo nada, el 'texto' a qué se refiere?

Un saludo,

Geru.

roman 18-07-2007 19:43:22

'Texto' sería una variable de tipo string en donde colocas el resultado de la función Format. En otras palabras, Format convierte NumeroReal en un string. Ese string puedes colocarlo en una variable o directamente en el Edit, Label o el control que desees para mostrar el valor.

// Saludos

seoane 18-07-2007 19:46:59

Es como dice roman, o lo que es lo mismo:
Código Delphi [-]
Writeln(Format ('Valor: %.2G', [NumeroReal]));

roman 18-07-2007 19:52:03

¡Ah, claro! Olvidaba que es una aplicación de consola :)

// Saludos

gerupc 18-07-2007 20:02:28

Aupa,

Ok, perfecto, muchísimas gracias por vuestra ayuda, ya lo he conseguido ;)

Un saludo,

Geru.

gerupc 19-07-2007 15:31:19

Aupa,

Al final he encontrado otra forma más sencilla para el formato de 'Real', por ejemplo:

Código Delphi [-]
Writeln('Prueba de numero real',numero:5:2);    //Indica 5posiciones: 2 Decimales (Se amolda a las necesidades sencillamente)

Pues eso, simplemente comentarlo, por si a alguien le viene bien ;)


La franja horaria es GMT +2. Ahora son las 20:28:41.

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