Versão atual:

Erro em instanciação de classe

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

Versões (7):

Ver a versão formatada

Deletar uma função compilada

Comentário

new question