Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!

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
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags escopo private classe ou faça a sua própria pergunta.