Página 1 de 1
Harbour
Enviado: 14 Abr 2019 15:20
por LABREGO
Alguém poderia me ajudar no problema que estou encontrando?
Estou desenvolvendo um sistema orientado a objeto e deparei-me com o problema descrito abaixo.
Quando herdo a classe PopUp em uma classe qualquer ocorre o erro em tempo de execução:
Error BASE/3002 Super class 'POPUP' does not return an object: __CLSINSTSUPER
Eis um exemplo do código:
/*******************************/
CLASS TPopUp FROM PopUp
/******************************/
HIDDEN:
DATA oPopUp, oColors AS Object
EXPORT:
METHOD New, AddPopUp, AddPrompt, AddSeparator, Modal
ENDCLASS
Harbour
Enviado: 14 Abr 2019 16:03
por JoséQuintas
À primeira vista, o que tem nessa classe destruiu a classe herdada.
Harbour
Enviado: 14 Abr 2019 17:09
por asimoes
Se vai herdar tem que usar INHERIT
Então se essa classe PopUp existe:
CLASS TPopUp INHERIT PopUp
Harbour
Enviado: 14 Abr 2019 21:04
por alxsts
Olá!
Seja bem-vindo ao Fórum Labrego!
asimoes escreveu:Se vai herdar tem que usar INHERIT
FROM e INHERIT, em [x]Harbour, são sinônimos. Sendo assim, tanto faz.
Seu exemplo de código é pequeno não sendo possível uma análise mais ampla. Obrservando a mensagem de erro, observa-se que o método construtor da classe PopUp não está retornando um objeto, como deveria fazer. Algo assim:
Código: Selecionar todos
/*******************************/
CLASS PopUp
/******************************/
//
// Declarações
//
EndClass
//----------------------------------------------------------------------
Method New() Class PopUp
//
// Procedimentos
//
Return self // --> self é um objeto e representa a própria classe
//----------------------------------------------------------------------
/*******************************/
CLASS TPopUp FROM PopUp
/******************************/
HIDDEN:
DATA oPopUp, oColors AS Object
EXPORT:
// METHOD New, AddPopUp, AddPrompt, AddSeparator, Modal
METHOD New
METHOD AddPopUp
METHOD AddPrompt
METHOD AddSeparator
METHOD Modal
ENDCLASS
//----------------------------------------------------------------------
Method New() Class TPopUp
//
// Procedimentos
//
Return self // --> self é um objeto e representa a própria classe
//----------------------------------------------------------------------
É este tipo de construção de código (método retornando a própria classe) que possibilita escrevermos código como:
Neste caso, o método goTop() retorna self o próprio objeto TBrowse(), que tem em seguida invocado o seu método refreshAll().
Para facilitar a análise de código fonte, o Fórum tem a "tag code" presente na barra de ferramentas da página que se abre para postar mensagens. Basta clicar no botão mostrado abaixo e colar o código entre as tags.
Para outras informações sobre formatação de mensagens, veja:
Guia do BBCode
Harbour
Enviado: 14 Abr 2019 22:13
por JoséQuintas
alxsts escreveu:Seu exemplo de código é pequeno não sendo possível uma análise mais ampla.
Na verdade é bem mais simples.
Se ele quer desenvolver orientado a objeto, é porque ele sabe pra que serve e como funciona.
Se deu erro é porque está errado, simples assim.
Se é herança que quer testar, está aí o menor exemplo possível.
Pra que serve o resto?
Quem colocou deveria saber, afinal... colocou o resto pra que?
Harbour
Enviado: 15 Abr 2019 08:50
por Jairo Maia
Olá Pessoal,
JoséQuintas escreveu:Se deu erro é porque está errado, simples assim.
Na minha opinião, o erro está no método PopUp que não retorna um objeto. Herdar herdou, mas veja a mensagem de erro:
LABREGO escreveu:Error BASE/3002 Super class 'POPUP' does not return an object: __CLSINSTSUPER
Harbour
Enviado: 15 Abr 2019 10:00
por JoséQuintas
Jairo Maia escreveu:Herdar herdou, mas veja a mensagem de erro:
Pegaram herança do defunto errado kkkkkkkkkkkkkkkkkkkkkkkkkk
LABREGO escreveu:Quando herdo a classe PopUp em uma classe qualquer ocorre o erro em tempo de execução:
Pela pergunta, parecia uma classe conhecida... do próprio Harbour.
Que classe é essa? Ela existe e funciona?
Harbour
Enviado: 15 Abr 2019 10:16
por JoséQuintas
É isto que está chamando de classe?
Código: Selecionar todos
oPopUp := Popup()
oPopUp:colorSpec := cColor
oPopUp:AddItem( MenuItem( "&Prima nota", {|| NIL },, "Some msg 1" ) )
oPopUp:AddItem( MenuItem( HB_MENU_SEPARATOR_UNI ) )
Pra quem vai fazer orientado a objeto... pressupõe-se que sabe o que é classe.
E pra quem vai fazer herança, pressupõe-se que pelo menos olhou como é a classe original.
Put. que par...
Isso lembra quem pergunta sobre ADVPL....