Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Almacenando datos en una variable de otra unidad (https://www.clubdelphi.com/foros/showthread.php?t=59269)

R0M3R0 19-08-2008 21:34:30

Almacenando datos en una variable de otra unidad
 
miren Tengo estas dos unidades

Código Delphi [-]
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables,Unit2;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
usuario:TUsuario;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
usuario.poner(Edit1.Text);
end;
end.



y esta


Código Delphi [-]
unit Unit2;
interface
uses
Classes,Dialogs;
type
TUsuario=class
private
cuenta:String;
public
procedure Poner(cuenta_:string);
end;
implementation
procedure Tusuario.Poner(cuenta_ : string);
begin
cuenta:=cuenta_;
ShowMessage(cuenta);
end;
End.



Por QUE no puedo almacenar desde unit11 a unit2 en la variable cuenta
por favor corrijanme por que no puedo almacenar en CUENTA

Ñuño Martínez 19-08-2008 22:11:37

"cuenta" es una variable privada. Para poder acceder debería ser pública o existir una propiedad pública asociada a ella.

R0M3R0 19-08-2008 23:00:44

Almacenando datos en variables de otra unidad
 
Esa solucion tb ya la habia intentando
pero como veras Poner es un procedimiento de TUsuario entonces este procedimiento que es publico deberia permitir acceder a variables incluso PRIVADAS como cuenta

Pdta.Estoy usando delphi 2007

dec 19-08-2008 23:05:28

Hola,

Dices que no puedes acceder a la variable "cuenta", lo que es lógico, por ser privada, pero, dices también que no puedes cambiar su valor (supongo que dices esto) desde el método público que preparaste para tal fin. Ahora bien, ¿qué error obtienes? Sería importante que lo refieras aquí.

R0M3R0 20-08-2008 02:20:16

almacenando datos en variables de otra unidad
 
me sale error de escritura y una direccion de memoria

R0M3R0 20-08-2008 02:24:11

compilando primer mensaje
 
SI compilan el codigo de las 2 primeras unidades se daran cuenta a que error me refiero

dec 20-08-2008 02:25:52

Hola,

Cita:

SI compilan el codigo de las 2 primeras unidades se daran cuenta a que error me refiero
Claro. Pero, si lo copias tú aquí exactamente, nos ahorramos tener que hacer lo que dices. Es más sencillo que tú copies el texto íntegro del error aquí, a que todos nosotros tengamos que compilar el código para averiguar por nuestra propia cuenta de qué error se trata. ¿No te parece?

roman 20-08-2008 02:32:30

Tal como dice dec, lo correcto es que pongas tú el mensaje de error en lugar de que nosotors andemos adivinándolo.

Pero bueno, con mi ojo compilador te diré que falta la construcción del objeto Usuario. No puedes simplemente declarar una variable objeto y utilizarla, debes primero construirla.

// Saludos

dec 20-08-2008 02:50:14

Hola,

Cita:

Empezado por Román
No puedes simplemente declarar una variable objeto y utilizarla, debes primero construirla.

A no ser que se tratara de una clase "estática". Pero, en todo caso, puede que los tiros vayan por donde dices Román.

roman 20-08-2008 02:53:00

Cita:

Empezado por dec (Mensaje 308531)
A no ser que se tratara de una clase "estática".

Tienes razón, delphi ya soporta eso ¿verdad? Pero, en todo caso tendría que declararse como tal ¿no?

// Saludos

dec 20-08-2008 02:55:37

Hola,

Sí; y además no estoy seguro de si una clase "estática", que es aquella que tiene al menos un método "estático" o "de clase", puede contar con miembros tal que variables... porque no me queda claro de qué modo se inicializarían. En PHP es posible contar con variables estáticas en clases estáticas, pero, si te digo la verdad tampoco me queda muy claro su inicialización...

Pero, vamos, que sí, que yo he salido un poco por los cerros de Úbeda, y que la clase que nos muestra el compañero no parece estática, así que no aplicaría lo que yo digo, sino es tomando por el extremo lo que tú has dicho. Y no es plan. :D

HySTD 21-08-2008 21:09:04

Efectivamente, la respuesta que te dieron es correcta! Debes llamar al constructor. Si no implementas uno nuevo, llamará al de la superclase. Por tanto el código quedaría algo así:

Cita:

unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables,Unit2;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
usuario:TUsuario;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
usuario:=TUsuario.Create;
usuario.poner(Edit1.Text);
end;
end.
Del mismo modo, el error se produjo al llamar a un objeto de la clase (un TEdit), sin haber creado una instancia de TUsuario. Si hubieras puesto una cadena constante, habría "colado":

Cita:

unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables,Unit2;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
usuario:TUsuario;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
usuario.poner('hola');
end;
end.
Un saludo.


La franja horaria es GMT +2. Ahora son las 12:02:13.

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