Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Exclamation 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.


Responder Con Cita
  #2  
Antiguo 17-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No te sobra este punto y coma:
Código Delphi [-]
Tusuario = class;
Responder Con Cita
  #3  
Antiguo 17-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Holal,

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

Un saludo,

Geru.
Responder Con Cita
  #4  
Antiguo 17-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 17-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 17-07-2007 a las 19:56:44.
Responder Con Cita
  #6  
Antiguo 17-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 17-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vaya, esto si que es sincronización
Responder Con Cita
  #8  
Antiguo 17-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 17-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
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.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #10  
Antiguo 17-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 17-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Ya lo siento, pero soy un poco novato... asi que no se cómo se hace.

¿Cómo podría hacerlo?

Muchas gracias y un saludo,

Geru.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #12  
Antiguo 18-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
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.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #13  
Antiguo 18-07-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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".
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 18-07-2007 a las 10:02:58.
Responder Con Cita
  #14  
Antiguo 18-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
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.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #15  
Antiguo 18-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
'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
Responder Con Cita
  #16  
Antiguo 18-07-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Es como dice roman, o lo que es lo mismo:
Código Delphi [-]
Writeln(Format ('Valor: %.2G', [NumeroReal]));
Responder Con Cita
  #17  
Antiguo 18-07-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah, claro! Olvidaba que es una aplicación de consola

// Saludos
Responder Con Cita
  #18  
Antiguo 18-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
Aupa,

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

Un saludo,

Geru.
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
  #19  
Antiguo 19-07-2007
Avatar de gerupc
gerupc gerupc is offline
Miembro
 
Registrado: jul 2007
Ubicación: Universidad de Deusto
Posts: 61
Poder: 17
gerupc Va por buen camino
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
__________________
Mi Blog
---------------------
Universidad de Deusto
ESIDE-Escuela Superior de Ingenieros Deusto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Indy soporta Free Pascal/Lazarus Delfino Noticias 6 15-01-2006 10:55:55
Duda sobre creación de clase (Free y Destroy) adlfv OOP 3 09-10-2005 06:11:16
manual de excepciones de object pascal para free pascal??? Garion OOP 3 27-05-2005 00:42:29
Free Pascal 2.0 marcoszorrilla Noticias 6 19-05-2005 12:04:51
Free Pascal y Lazarus Magician^ Noticias 7 31-03-2004 19:12:04


La franja horaria es GMT +2. Ahora son las 21:18:54.


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
Copyright 1996-2007 Club Delphi