Harbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

LABREGO
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 14 Abr 2019 15:12
Localização: Barueri

Harbour

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour

Mensagem por JoséQuintas »

À primeira vista, o que tem nessa classe destruiu a classe herdada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harbour

Mensagem por asimoes »

Se vai herdar tem que usar INHERIT

Então se essa classe PopUp existe:

CLASS TPopUp INHERIT PopUp
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Harbour

Mensagem 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:

Código: Selecionar todos

oTBrowse:goTop():refreshAll()
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.
BotãoCode.JPG
Para outras informações sobre formatação de mensagens, veja: Guia do BBCode
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour

Mensagem 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.

Código: Selecionar todos

CLASS TPopUp INHERIT PopUp
   END CLASS
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?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Harbour

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour

Mensagem 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?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour

Mensagem 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.

Código: Selecionar todos

FUNCTION Popup( nTop, nLeft, nBottom, nRight )
Put. que par...
Isso lembra quem pergunta sobre ADVPL....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder