TL++ Modificador de Acesso

Pessoal, estou tentando desenvolver um projeto em TL++ mas estou encontrando o seguinte problema:

Estou criando minha classe da seguinte forma:


#include "protheus.ch"

class NotaFiscal 
    data numero as character
    method new() 
endclass

method new() class NotaFiscal
    ::Filial := ""
return self

Porém, quando instancio a classe NotaFiscal e tento acessar a propriedade numero, gera um erro informando que não é permitido acessar uma propriedade privada.

Se eu alterar a declaração da propriedade para public data numero as character dá erro de compilação.

Boa noite Frederico,

Em TLPP, o escopo padrão de uma propriedade é privado, como a própria documentação informa:

http://tdn.totvs.com/display/tec/Encapsulamento+-+Modificador+de+Acesso

Nessa mesma documentação, informa que é necessário que o CH msobject.ch precisa estar atualizado, acredito que você esteja com esse CH desatualizado, pois parece estar tudo correto em relação a seu exemplo público de propriedade.

Consegui compilar e utilizar de sua classe da seguinte forma:


#include "protheus.ch"

class NotaFiscal 
    public data numero as character
    private data Filial as character
    public method new() 
endclass

method new() class NotaFiscal
    ::Filial := ""
    ::numero := ""
return self

Só tive que declarar também a propriedade Filial, pois estava gerando error.log e deixei o método new como público também.

Esse CH foi atualizado para que um classe possa ser compilada em TLPP, pois a classe passa por um grande processo de pré-compilação.

Verifique a atualização de seus CHs, pois já existem projetos em TLPP utilizando dos escopos de propriedades em classes.

O problema era mesmo no msobject.ch. Achei que por ter migrado para a 12.1.23 o CH já estaria atualizado. Baixei os includes mais novos no portal e funcionou. No meu caso nem precisei criar a propriedade Filial e nem declarar o construtor com public.

Muito obrigado!

Olá Frederico,

Além das alterações em seu código sugeridas pelo Daniel, sugiro também utilizar a include do tlppCore, sendo:

include 'tlpp-core.th'

Ideal que ela seja a primeira a ser usada, ficando:

include 'tlpp-core.th'

include "protheus.ch"

Para se obter as includes do tlppCore, siga as instruções de: https://tdn.totvs.com/pages/viewpage.action?pageId=555860439

Abs, Denardi