Hola, estoy tratando de pasar mi clasesita de Delphi a Lazarus para programar sobre linux ubuntu y probar que tal me va... resulta que me esta dando error y ya se me quemo el libro
Error: Incompatible types: got "Pointer" expected "TSocio"
Este seria el error en esta parte
Exactamente en la linea
Result := FSocios[index];
function TSocioList.GetItems(index:integer):TSocio;
begin
Result := FSocios[index];
end;
Aqui una parte de mi clasesita
Código Delphi
[-]
type
TSocio = class (TPersistent)
protected
FNumero:integer;
FApellido:string;
FNombre:string;
etc... etc...
Hasta ahi todo bien
Y despues quiero una lista de 1 a n datos
Código Delphi
[-]
TSocioList = class (TPersistent)
private
FSocios:TList;
protected
function GetItems(index:integer): TSocio;
public
constructor Create;
procedure Add(item:TSocio);
procedure Delete(index:integer);
function GetCount:integer;
property Count:integer read GetCount;
property Items[index:integer]: TSocio read GetItems;
end;
implementation
constructor TSocioList.Create;
begin
FSocios := TList.Create;
end;
procedure TSocioList.Add(item:TSocio);
begin
FSocios.Add(item);
end;
procedure TSocioList.Delete(index:integer);
begin
FSocios.Delete(index);
end;
function TSocioList.GetCount:integer;
begin
Result := FSocios.Count;
end;
function TSocioList.GetItems(index:integer):TSocio;
begin
Result := FSocios[index];
end;
Levanto datos de mi base de datos con query y asigno a la lista
la clase me devuelve una lista con 1 o n datos de mi tabla
que despues por cada formulario o donde sea los puedo usar
Código Delphi
[-]
type
TfrmMain = class(TForm)
private
FSocio:TSocio;
function GetSocio: TSocio;
procedure SetSocio(const value: TSocio);
public
property Socio:TSocio read GetSocio write SetSocio;
end;
var
frmMain: TfrmMain;
implementation
function TfrmMain.GetSocio: TSocio;
begin
if not Assigned (FSocio) then
FSocio := TSocio.Create;
Result := FSocio;
end;
procedure TfrmMain.SetSocio(const value: TSocio);
begin
FSocio := Value;
end;
procedure TfrmMain.PrepareEdit;
begin
edtNumero.Text := IntToStr(Socio.Numero);
edtApellido.Text := Socio.Apellido;
edtNombre.Text := Socio.Nombre;
end;
etc... etc...
Si tengo que agregar otra parte de codigo para que se entienda solo pidan me
El error no debe ser tan grave ya que en delphi esto funciona
El problema esta en free pascal del lazarus