o que é Abstract Error??
27/03/2007
0
pq?
Pvitor
Posts
27/03/2007
Pvitor
edtregistro ,edtnome, edttelresidencia, edtemail.
e ao clicar no btn qero q seja gravado no meu banco d dados...
procedure TfrmClientes.CmdBtnInserirClick(Sender: TObject);
var
Cli : Cliente;
begin
Cli := Cliente.Create;
Cliente(Cli).setRegistro(edtRegistro.Text);
Cliente(Cli).setNome(edtNome.Text);
Cliente(Cli).setTelResidencia(edtTelResidencia.Text);
Cliente(Cli).setEmail(edtEmail.Text);
Cli.Persistir;
edtRegistro.Clear;
edtNome.Clear;
edtTelResidencia.Clear;
edtEmail.Clear;
end;
27/03/2007
Massuda
28/03/2007
Dmenin
mas para ter certeza, em qual linha ocorre o erro?
28/03/2007
Marco Salles
concordo massuda , com a suas colocaçoes.. Pelo menos é assim que esta nos livros.. Mas algo no minimo esquisito ocorre com a classe TStrings
Exemplo:
procedure TForm1.Button1Click(Sender: TObject); var lista:TStrings; begin lista:=TStrings.Create; lista.Add(´xii vai dar erro´); showmessage(lista.Strings[0]); lista.Free; end;
Obteremos um abstractErro quando executamos o codigo a seguir
Porém a Classe TStringList Herda da Classe Tpersistent que herda da TObject
A classe TstringList com era de se esperar , não implementa o método Create..
Porém este mesmo méotodo não fo idefinido como abstract na classe TPersistent
O mesmo so foi declarado na classe TObject e não esta com abstract
Eu sinceramente apesar de concordar , não consigo nesta situação ver , o mesmo comportamento em relação as classes definidas da vcl ????
e agora jose???
28/03/2007
Massuda
Por exemplo... embora TComboBox.Items e TListBox.Items sejam ambos TStrings, internamente eles são implementados de modo diferente, sendo, na verdade, objetos de classes diferentes que tem um ancestral comum, no caso, TStrings.
[quote:97a865d8ef=´Marco Salles´]Porém a Classe TStringList Herda da Classe Tpersistent que herda da TObject
A classe TstringList com era de se esperar , não implementa o método Create..
Porém este mesmo méotodo não fo idefinido como abstract na classe TPersistent
O mesmo so foi declarado na classe TObject e não esta com abstract[/quote:97a865d8ef]Não entendi.
28/03/2007
Marco Salles
sim , esta na ajuda... Mas não deveria estar tb na implementação desta classe no Delphi ???
Olhando a definiççao desta classe na Unit CLasses , aonde ela é implementada , [b:60d37ec80a]eu sinceramente não consigo chegar a esta conclusão[/b:60d37ec80a] :cry: :cry: :cry:
[b:60d37ec80a]marco salles citou[/b:60d37ec80a]
:!: :!:
O que eu quis dizer por[u:60d37ec80a][b:60d37ec80a] analoia [/b:60d37ec80a][/u:60d37ec80a]a estas classes abaixo , foi o seguinte
[b:60d37ec80a]Ao executar[/b:60d37ec80a] :arrow: :arrow:
[color=darkred:60d37ec80a]é claro que obterei um erro Abstarct Error...[/color:60d37ec80a]
Então por analogia eu pensei (sem levar ao pé da letra o que esta escrito no Help do delphi sobre a classe Tstring) que o método create da Classe Tstring , deveria esta presente na classe tpersistente com abstract..
[b:60d37ec80a]Porque estou falando deste método exclusivamente ..[/b:60d37ec80a] :?: :?:
[color=darkblue:60d37ec80a][u:60d37ec80a][b:60d37ec80a]Porque ao executar o código abaixo e ao [b]depurar[/b:60d37ec80a] , verifica-se que da erro no método Cretate[/b][/u:60d37ec80a][/color:60d37ec80a]
procedure TForm1.Button1Click(Sender: TObject); var lista:TStrings; begin lista:=TStrings.Create; lista.Add(´xii vai dar erro´); showmessage(lista.Strings[0]); lista.Free; end;
Enfim , eu não uso diretamente a TStrings , por na prática , ja ter sentido seus efeitos... Porém sinceramente , se fosse olhar a definição desta classe não concluiria que se trata de uma classe puramente abstrata :cry: :cry:
28/03/2007
Massuda
Uma classe abstrata não implica em uma classe com todos os métodos abstratos. No caso de TStrings, note que os métodos abstratos dela são basicamente aqueles relacionados com a forma de armazenamento das strings; outros métodos podem ser perfeitamente implementados sem necessidade de se saber como as strings são armazenadas, logo não necessitam ser abstratos.
[quote:5f6c36591f=´Marco Salles´]é claro que obterei um erro Abstarct Error...
[/quote:5f6c36591f]Na verdade você obtem novamente o aviso ao compilar sobre estar criando um objeto com métodos abstratos.
[quote:5f6c36591f=´Marco Salles´]Porém sinceramente , se fosse olhar a definição desta classe não concluiria que se trata de uma classe puramente abstrata[/quote:5f6c36591f]Qualquer classe que tenha pelo menos um método abstrato é uma classe abstrata. Infelizmente, a sintaxe do ObjectPascal não deixa isso claro. Nesse ponto, OP se parece muito com C++, embora a sintaxe de método abstrato em C++ seja pior (você põe um ´= 0´ na definição do método); C# usa uma sintaxe mais clara, obriga a incluir um ´abstract´ na declaração da classe.
28/03/2007
Marco Salles
a bronca ocorrreu devido a :
procedure TForm1.Button1Click(Sender: TObject);
var lista:TStrings; begin lista:=TStrings.Create; //pensei que a exceção estava ocorrendo aqui lista.Add(´xii vai dar erro´); //mas não , ela ocorre aqui.. showmessage(lista.Strings[0]); lista.Free; end;
eu pensei que a exceção lançada fosse no método cretae....Mas a exceção foi levantada método Add
Assim eu verifiquei as definiçoes e pude constatar que:
e no cabeçalho da classe a função GetCount esta definida com abstract
[b:17212a8d12]
tirando qualquer dúvida
obrigado...
Clique aqui para fazer login e interagir na Comunidade :)