Clipper On Line • Ver Tópico - Harbour

Harbour

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

Moderador: Moderadores

 

Harbour

Mensagempor LABREGO » 14 Abr 2019 15:20

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
LABREGO
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 14 Abr 2019 15:12
Cidade/Estado: Barueri
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Harbour

Mensagempor JoséQuintas » 14 Abr 2019 16:03

À primeira vista, o que tem nessa classe destruiu a classe herdada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18141
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Harbour

Mensagempor asimoes » 14 Abr 2019 17:09

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harbour

Mensagempor alxsts » 14 Abr 2019 21:04

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:
/*******************************/
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:
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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Harbour

Mensagempor JoséQuintas » 14 Abr 2019 22:13

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.

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18141
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Harbour

Mensagempor Jairo Maia » 15 Abr 2019 08:50

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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Harbour

Mensagempor JoséQuintas » 15 Abr 2019 10:00

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18141
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Harbour

Mensagempor JoséQuintas » 15 Abr 2019 10:16

É isto que está chamando de classe?

   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.

FUNCTION Popup( nTop, nLeft, nBottom, nRight )


Put. que par...
Isso lembra quem pergunta sobre ADVPL....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18141
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro