Guest Fioravante Postado Novembro 6, 2005 Denunciar Share Postado Novembro 6, 2005 Olá pessoal estou começando a mexer com classes e gostaria de saber como corrigir um erro.Por favor se alguém tiver uma dica,eu ficaria grato.Ai vai o codigo da unit:unit formas;interfaceuses extctrls,Graphics;typeTFigura=class(Tobject) public color:Tcolor; constructor create;virtual; procedure desenhar(canvas:Tcanvas);virtual;abstract; procedure apagar(canvas:Tcanvas);virtual;abstract; end;TRetangulo=class(Tfigura) private x1,y1,x2,y2:integer; public constructor create;virtual; procedure setposition(ax1,ay1,ax2,ay2:integer); function area:integer; destructor destroy;override; procedure desenhar(canvas:Tcanvas);override; procedure apagar(canvas:Tcanvas);override; end;TQuadrado=class(Tretangulo) private aresta:integer; public constructor create;override; procedure setquadrado(ax1,ay1,aresta:integer); end;implementation constructor TFigura.create; begin color:=Clblack; end; constructor Tretangulo.create; begin x1:=0; x2:=0; y1:=0; y2:=0; end; procedure Tretangulo.setposition(ax1,ay1,ax2,ay2:integer); begin x1:=ax1; x2:=ax2; y1:=ay1; y2:=ay2; end; function Tretangulo.area:integer; begin result:=(x2-x1)*(y2-y1); end; destructor Tretangulo.destroy; begin x1:=0; x2:=0; y1:=0; y2:=0; inherited destroy; end; procedure TRetangulo.desenhar(canvas:TCanvas); begin canvas.pen.color:=color; canvas.moveto(x1,y1); //posiciona a caneta canvas.lineto(x2,y1); //faz uma linha canvas.lineto(x1,y2); canvas.lineto(x1,y1); end; procedure TRetangulo.apagar(canvas:Tcanvas); var cor:Tcolor; begin cor:=canvas.pixels[1,1]; canvas.pen.color:=cor; canvas.moveto(x1,y1); //posiciona a caneta canvas.lineto(x2,y1); //faz uma linha canvas.lineto(x1,y2); canvas.lineto(x1,y1); end; constructor TQuadrado.create; begin inherited create; aresta:=0; end; procedure TQuadrado.setquadrado(ax1,ay1,arest:integer);//erro neste ponto begin aresta:=arest; setposition(ax1,ay1,ax1+aresta,ay1+aresta); end;end. Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 6, 2005 Denunciar Share Postado Novembro 6, 2005 E qual a mensagem do erro?Abraços,Graymalkin Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Fioravante Postado Novembro 6, 2005 Denunciar Share Postado Novembro 6, 2005 [Warning] formas.pas(20): Method 'create' hides virtual method of base type 'TFigura'[Error] formas.pas(99): Declaration of 'setquadrado' differs from previous declaration[Error] formas.pas(101): Undeclared identifier: 'arest'[Fatal Error] desenhando.dpr(6): Could not compile used unit 'formas.pas'Gera estes erros.Obrigado pela resposta. Link para o comentário Compartilhar em outros sites More sharing options...
0 Graymalkin Postado Novembro 6, 2005 Denunciar Share Postado Novembro 6, 2005 Olhe a prototipação:procedure setquadrado(ax1,ay1,aresta:integer);E agora olhe a declaração:procedure TQuadrado.setquadrado(ax1,ay1,arest:integer);Ao que parece, diferentemente de outras linguagens, onde o que importa são os tipos dos parâmetros, Delphi se preocupa também com os nomes.Abraços,Graymalkin Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Fioravante Postado Novembro 7, 2005 Denunciar Share Postado Novembro 7, 2005 Obrigadão!!! Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Fioravante
Olá pessoal estou começando a mexer com classes e gostaria de saber como corrigir um erro.
Por favor se alguém tiver uma dica,eu ficaria grato.
Ai vai o codigo da unit:
unit formas;
interface
uses extctrls,Graphics;
type
TFigura=class(Tobject)
public
color:Tcolor;
constructor create;virtual;
procedure desenhar(canvas:Tcanvas);virtual;abstract;
procedure apagar(canvas:Tcanvas);virtual;abstract;
end;
TRetangulo=class(Tfigura)
private
x1,y1,x2,y2:integer;
public
constructor create;virtual;
procedure setposition(ax1,ay1,ax2,ay2:integer);
function area:integer;
destructor destroy;override;
procedure desenhar(canvas:Tcanvas);override;
procedure apagar(canvas:Tcanvas);override;
end;
TQuadrado=class(Tretangulo)
private aresta:integer;
public
constructor create;override;
procedure setquadrado(ax1,ay1,aresta:integer);
end;
implementation
constructor TFigura.create;
begin
color:=Clblack;
end;
constructor Tretangulo.create;
begin
x1:=0;
x2:=0;
y1:=0;
y2:=0;
end;
procedure Tretangulo.setposition(ax1,ay1,ax2,ay2:integer);
begin
x1:=ax1;
x2:=ax2;
y1:=ay1;
y2:=ay2;
end;
function Tretangulo.area:integer;
begin
result:=(x2-x1)*(y2-y1);
end;
destructor Tretangulo.destroy;
begin
x1:=0;
x2:=0;
y1:=0;
y2:=0;
inherited destroy;
end;
procedure TRetangulo.desenhar(canvas:TCanvas);
begin
canvas.pen.color:=color;
canvas.moveto(x1,y1); //posiciona a caneta
canvas.lineto(x2,y1); //faz uma linha
canvas.lineto(x1,y2);
canvas.lineto(x1,y1);
end;
procedure TRetangulo.apagar(canvas:Tcanvas);
var cor:Tcolor;
begin
cor:=canvas.pixels[1,1];
canvas.pen.color:=cor;
canvas.moveto(x1,y1); //posiciona a caneta
canvas.lineto(x2,y1); //faz uma linha
canvas.lineto(x1,y2);
canvas.lineto(x1,y1);
end;
constructor TQuadrado.create;
begin
inherited create;
aresta:=0;
end;
procedure TQuadrado.setquadrado(ax1,ay1,arest:integer);//erro neste ponto
begin
aresta:=arest;
setposition(ax1,ay1,ax1+aresta,ay1+aresta);
end;
end.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados