Class e Function conflitam

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

Moderador: Moderadores

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

Class e Function conflitam

Mensagem por asimoes »

Pessoal,

Essa semana deu um erro bem esquisito:

Temos uma lib que tem uma classe chamada Tela (CREATE CLASS Tela), deu um erro em um sistema de uma equipe que tinha nesse sistema uma function com o mesmo nome da classe, quando a classe era invocada na lib a chamada era para function desse sistema que não tinha as VAR dessa classe, produzindo erro, resumo renomeamos o nome da classe na lib para telacorp para não conflitar.

O que eu entendi foi que a function sobrepos a classe
►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 do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Class e Function conflitam

Mensagem por ANDRIL »

Talvez a ordem de compilação interfira, não sei se é seu caso, mais meus PRGs vão sempre no final no script. Por estar esta function no prg pode-se assumir que ela prevaleceu. Embora não deveria ocorrer o problema já que são declarações diferentes.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Class e Function conflitam

Mensagem por asimoes »

Andril,

A CREATE CLASS Tela está em uma lib e a FUNCTION Tela em um prg da aplicação, a confusão foi quando dentro da lib chamar a classe Tela

A chamada da classe Tela é feita dentro da própria lib

oTela:=Tela():New() que chamou a FUNCTION Tela() da aplicação bug ou é outra coisa ?
►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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Class e Function conflitam

Mensagem por JoséQuintas »

Acho que isso é normal.

Já deve ter percebido que minhas classes tem a terminação Class, que evita esse problema.

Por exemplo, SefazClass()

A sugestão é trocar o nome pra TelaClass(), e não precisar se preocupar.

Ou em certos casos, até iniciais, como acontece em HMG_funcao(), RMC_ do RMChart, hb_ do Harbour, etc.
Dependendo do quanto a função/classe vai se "espalhar", é bom um nome único.
É diferente usar alguma coisa num único aplicativo, em vários, no mundo inteiro, ou até misturando linguagens de programação, como DLLs.
Chega uma hora que os nomes acabam.... rs
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

Class e Function conflitam

Mensagem por JoséQuintas »

Tem outra alternativa:
Não lembro detalhes, mas seria criar a classe local, e uma função pra criar a variável.

Código: Selecionar todos

oVar := ClasseSimoesTela()
E no fonte da classe local, esta função.

Código: Selecionar todos

FUNCTION ClasseSimoesTela()
   LOCAL oVar
   oVar := Tela():New()
   RETURN oVar
Teria que pesquisar, porque sei que isso existe, mas não lembro qual a declaração pra classe ser local.
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

Class e Function conflitam

Mensagem por asimoes »

Por hora vou colocar um nome bem específico que eu sei que não será usado em outro prg.
►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)
Responder