Estou iniciando em ADVPL. Meu arquivo-fonte é o de nome 'primeiro.tlpp'.
O Protheus, na execução do menu criado por mim e que foi associado à função do código em questão, dá o erro abaixo:
THREAD ERROR ([16348], Mautresim, PC-MEU) 04/08/2021 18:42:38 Invalid call to a PRIVATE method named NEW on EXEMPLO:NEW(PRIMEIRO.TLPP) 04/08/2021 15:32:49 line : 6
Por que o escopo 'private' está sendo rejeitado? O interessante é que não tenho variável declarada como 'private'.
A linha 6 citada acima é a 'Local oSoma1 := Exemplo():New() // Crio um novo objeto de exemplo ( objeto 1 )'
O código é de um tutorial que peguei de um documento da Totvs em que fiz algumas modificações, tais como trocar a natureza da função de FUNCTION para USER FUNCTION e também trocando 'conout' por 'alert' na exibição dos resultados:
#INCLUDE "PROTHEUS.CH"
// Crio uma função para teste da Classe Exemplo
User Function u_mauro01()
Local oSoma1 := Exemplo():New() // Crio um novo objeto de exemplo ( objeto 1 )
Local oSoma2 := Exemplo():New() // Crio outro objeto de exemplo ( objeto 2 )
// Realizo 3 chamadas ao método Soma, com o objeto 1
oSoma1:Soma(10)
oSoma1:Soma(20)
oSoma1:Soma(30)
// Realizo 2 chamadas ao método Soma, com o objeto 2
oSoma2:Soma(30)
oSoma2:Soma(30)
// Imprimo no console o acumulador das somas do obj 1 ( 60 )
alert(oSoma1:nAcumulador)
// Imprimo no console o acumulador das chamadas à soma com o objeto 1 ( 3 )
alert(oSoma1:nChamadas)
// Imprimo no console o acumulador das somas do obj 2 ( 60 )
alert(oSoma2:nAcumulador)
// Imprimo no console o acumulador das chamadas à soma com o objeto 2 (2)
alert(oSoma2:nChamadas)
Return
// --------------------------------------------------------------------------------
// Declaracao da Classe Exemplo
// --------------------------------------------------------------------------------
CLASS Exemplo
// Declaracao das propriedades da Classe
DATA nAcumulador
DATA nChamadas
// Declaração dos Métodos da Classe
METHOD New() CONSTRUCTOR
METHOD Soma( nNum )
ENDCLASS
// Criação do construtor, onde atribuimos os valores default
// para as propriedades e retornamos Self
METHOD New() Class Exemplo
::nAcumulador := 0
::nChamadas := 0
Return Self
// Criação do Método de Soma , que recebe um número e o soma
// ao acumulador, retornando o conteudo do acumululador após
// a soma , e incrementa em 1 o contador de chamadas do método
METHOD Soma( nNum ) Class Exemplo
::nAcumulador += nNum
::nChamadas++
Return ::nAcumulador