Página 1 de 1
Class e Function conflitam
Enviado: 11 Mai 2017 11:45
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
Class e Function conflitam
Enviado: 11 Mai 2017 12:10
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.
Class e Function conflitam
Enviado: 11 Mai 2017 12:42
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 ?
Class e Function conflitam
Enviado: 11 Mai 2017 12:50
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
Class e Function conflitam
Enviado: 11 Mai 2017 12:59
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.
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.
Class e Function conflitam
Enviado: 11 Mai 2017 14:51
por asimoes
Por hora vou colocar um nome bem específico que eu sei que não será usado em outro prg.