Erro ao compilar com o Xailer

Discussão sobre a Xailer

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Erro ao compilar com o Xailer

Mensagem por gilsonpaulo »

Estou tento este seguinte problema com o Xailer, alguem poderia me dar uma luz?

A Compilar: RVLMSG.PRG...
A Compilar: RVLMENU.PRG...
RVLMENU.PRG(29) Warning W0001 Ambiguous reference: 'PSTOP'
RVLMENU.PRG(29) Warning W0001 Ambiguous reference: 'PTOTREG'
A Compilar: RVLSTART.PRG...
A Criar livraria: rvl.lib...
2 Warnings, 0 Errors

O erro esta acontecendo no rvlmenu.prg

Código: Selecionar todos

#include "acesso.ch"

/*
 * EscCampo() - Mostra por ACHOICE o conteudo de pArray[ 2 ] ( Descricao ),
 *        para escolha, devolvendo o conteudo de pArray[ 1 ] ( codigo )
 *				selecionada.
 *
 *    pVarCod     -  Variavel passada como endere‡o
 *    pArray[1]   -  Nome da array com os codigos
 *                - O QUE OBTEMOS POR REFERENCIA
 *    pArray[2]   -  Nome da array com as descricoes
 *                - O QUE VEMOS
 */

FUNCTION EscCampo( pVarCod, pArray, pTop, pLeft, pBottom, pRight )

LOCAL tTotReg:=   LEN( pArray[1] )
LOCAL tEscolha
LOCAL wTela:=     SAVESCREEN( pTop, pLeft, pBottom, pRight )
LOCAL tCor:=      SETCOLOR( CorJan() )
LOCAL tBottom:=   IF( tTotReg > ( pBottom - pStop -1 ), pBottom, pTop + pTotReg +1 )

IF EMPTY( pVarCod )
   @ pTop, pLeft, pBottom, pRight BOX BoxFrame()
   RvlShadow( pTop, pLeft, pBottom, pRight )
   tEscolha:=  ACHOICE( pTop, pLeft+1, pBottom-1, pRight-1, pArray[2] )

   RESTSCREEN( pTop, pLeft, pBottom, pRight, wTela )

   IF ( tEscolha != 0 )
	  pVarCod:=   pArray [ 1 ] [ tEscolha ]
   ENDIF

  ELSE

   tEscolha:=	  ASCAN( pArray[1], pVarCod )
ENDIF

SETCOLOR( tCor )

RETURN( tEscolha != 0 )


/*
 * PullDown( pTop, pLeft, paMenu, pPrg, pDigitos )
 *
 *
 *	  pTop, pLeft	 :	Linha superior e coluna da esquerda
 *    paMenu       :  Array contendo as opcoes a serem mostradas
 *    pPrg         :  Nome do programa de menu que chama esta funcao
 *    pDigitos     :  Numero de digitos acrescentados a pPrg para a
 *                    formacao do nome do programa a ser chamado
 */


FUNCTION PullDown( pTop, pLeft, paMenu, pPrg, pDigitos )


LOCAL wTela, tPrg, tX
LOCAL wOpcao:= 0
LOCAL wNumOpcoes:= LEN( paMenu )
LOCAL aMenuAutorizado:= {}


   FOR tX:= 1 TO wNumOpcoes

	  IF Autorizado( paMenu[tX][2], MSG_NAO )
       AADD( aMenuAutorizado, { paMenu[tX][1], tX } )
	  ENDIF
   NEXT tX

   wNumOpcoes:= LEN( aMenuAutorizado )

   IF ( wNumOpcoes = 0 )
      Autorizado( paMenu[1][2], MSG_SIM )
	 ELSE
      @ pTop, pLeft, pTop + wNumOpcoes +1,;
              pLeft + LEN( aMenuAutorizado[1][1] ) +1;
              BOX BoxFrame()



      RvlShadow( pTop, pLeft, pTop + wNumOpcoes +1,;
                 pLeft + LEN( aMenuAutorizado[1][1] ) +1 )
   ENDIF


   WHILE ( wNumOpcoes > 0 )

         SETCOLOR( CorMenu() )

         FOR tX:= 1 TO wNumOpcoes
             @ pTop + tX, pLeft + 1 PROMPT aMenuAutorizado[tX][1]
         NEXT tX

         MENU TO wOpcao

         wTela:= SAVESCREEN( 0, 0, MAXROW(), MAXCOL() )

         IF ( LASTKEY() = ESCAPE ) .OR. ( wOpcao = 0 )
            EXIT
          ELSE  // IF (wOpcao>=1 .and. wOpcao<= NumOpcoes ) ( faixa abrangida )
            tPrg:= pPrg + STRZERO( aMenuAutorizado[wOpcao][2], pDigitos )
            &Tprg.()
         ENDIF

         CLEAR TYPEAHEAD
         RESTSCREEN( 0, 0, MAXROW(), MAXCOL(), wTela )
   ENDDO

RETURN( NIL )


/*
 * CHOOSE()    -  Busca codeblock em arquivo e coloca conteudo em um array
 *                Mostra o conteudo do array por achoice()
 *
 *    pBlkCond    :  Bloco com a condicao para teste no Arquivo Selecionado
 *    pBlkLinha   :  Bloco com o conteudo que deve ter cada linha de Opcao
 *    pTop,
 *    pLeft,
 *    pBottom,
 *    pRight      :  Coordenadas de posicao em tela
 *    pInclui     :  Logico ( deve(.T.) ou nao(.F.) aceitar inclusoes )
 *    pBlkRet     :  Bloco com o conteudo a ser retornado. Se = NIL, RECNO()
 *
 */


FUNCTION Choose( pBlkCond, pBlkLinha, pTop,    pLeft,  ;
                 pBottom,  pRight,    pInclui, pBlkRet ;
               )

LOCAL wTotReg:=   0, tEscolha:= 0, tBottom
LOCAL tInclui:=   IIF( pInclui = NIL, .T., pInclui )
LOCAL aSalva:=	  { {}, {} }
LOCAL wTela:=     SAVESCREEN( pTop, pLeft, pBottom, pRight )
LOCAL tCor:=      SETCOLOR( CorJan() )
LOCAL tBlkRet:=   IIF( pBlkRet = NIL, { || RECNO() }, pBlkRet )

   IF ( !EOF() )

	  WHILE ( !EOF() .AND. EVAL( pBlkCond ) )

		 wTotReg++
		 AADD( aSalva[1],  EVAL( pBlkLinha ) )
		 AADD( aSalva[2],  EVAL( tBlkRet )	 )

		 SKIP
	  ENDDO

	  IF tInclui

		 wTotReg++
		 AADD( aSalva[1],  PADC( "*** INCLUI OUTRO REGISTRO ***",;
								 pRight-pLeft, "" ))
		 AADD( aSalva[2],  0 )

		 SKIP
	  ENDIF

	  tBottom:=   IIF( wTotReg > ( pBottom - pTop -1 ), pBottom,;
					   pTop +wTotReg + 1 )

	  @ pTop, pLeft, tBottom, pRight BOX BoxFrame()
    RvLShadow( pTop, pLeft, tBottom, pRight )

	  tEscolha:= ACHOICE(  pTop +1, pLeft +1, tBottom -1,;
						   pRight -1, aSalva[1], .T., )

	  RESTSCREEN( pTop, pLeft, pBottom, pRight, wTela )

	  IF (( tEscolha = wTotReg ) .AND. ( tInclui )) .OR. ( tEscolha = 0 )
		 GO BOTTOM						  // Se inclui ou ESC, vai para eof
		 SKIP							  // se pBlkRet (codblock) nÆo ‚ pas-
		ELSEIF ( pBlkRet = NIL )		  // sado como parƒmetro, posiciona no
     GO aSalva[2][tEscolha]       // recno() escolhido, devolvendo nu-
		ELSE							  // mero escolhido se passar, devolve
     tEscolha:= aSalva[2][tEscolha]   // o conteudo do mesmo
	  ENDIF
   ENDIF

   SETCOLOR( tCor )

   RETURN( tEscolha )


/*
 * GetNewOrder()  -  Procura o ultimo item do campo-de-ordem ( sequˆncia )
 *           e devolve o valor do ultimo incrementado de 1, a partir
 *					 do registro corrente. Depois vai para o fim do Arquivo.
 *
 * pBlkCond -  Bloco com a condicao para teste no arquivo selecionado
 *
 * pBlkRet	-  Bloco com o campo de ordem
 *
 */


FUNCTION GetNewOrder( pBlkCond, pBlkRet )

LOCAL	 tOrdem:= EVAL( pBlkRet )

   WHILE ( EVAL( pBlkCond ) .AND. !EOF()) .AND. ;
		 ( VAL( EVAL( pBlkRet )) <= VAL( tOrdem ) + 1 )

	  tOrdem:= EVAL( pBlkRet )
	  SKIP
   ENDDO

   GO LASTREC() + 1 	// VAI PARA O FIM DO ARQUIVO - INCLUSÇO

   RETURN( STRZERO( VAL( tOrdem ) +1, LEN( tOrdem )))


// eof - RVLMenu.prg

* PRG...................: Spacing
* CLASSE................: Espacejamento
* PREFIXO...............: Spa
* EXPORTA...............: Spa_Spacing()
* CONSTRUTORA...........:
* DESTRUTORA............:
* USA...................:
*
* COMENTARIOS...........: Compilar com /a /m /n /w
* NUMERICO[] spa_spacing(texts, l, r)
* CARACTERE  texts[] - Textos a espacejar
* NUMERICO   l, r    - entre estas duas colunas
* RETURN:    Vetor de colunas iniciais
*            Determina coluna inicial para cada texto, espacado uniformemente
*            entre l e r
*

FUNCTION RvlSpacing( aTextos, nLeft, nRight )

LOCAL    nSumLens,  nTextNum, nSpacesBetween, ;
         aCols:=    ARRAY( LEN( aTextos ))

*  Determina o tamanho total das mensagens
nSumLens:= 0
FOR nTextNum:= 1 TO LEN( aTextos )
    nSumLens +=  LEN( aTextos[nTextNum] )
NEXT

*  Quantidade de espacos entre itens
nSpacesBetween:= INT((( nRight - nLeft +1 ) - nSumLens ) / ;
                      ( LEN( aTextos ) +1 ))

*  Primeira posicao nao e conhecida
aCols[1]:=  1 + nSpacesBetween

*  Determina outros a partir desta
FOR nTextNum:= 2 TO LEN( aTextos )
    aCols[nTextNum]:=  aCols[nTextNum -1] + ;
                       LEN( aTextos[nTextNum -1] ) + ;
                       nSpacesBetween
NEXT

RETURN aCols
* : : : : :

FUNCTION RvlPrompt( cTexto )

@ 01,00 SAY REPLICATE( CHR(32), 80 )
@ 01,05 SAY cTexto

RETURN NIL
Compilando com clipper nao ocorre este erro.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Erro ao compilar com o Xailer

Mensagem por sygecom »

Você esta compilando ou gerando uma LIB pelo xailer ?

Pelo que vc postou não teve erros, apenas dois avisos....e a linha 29 do codigo que vc postou esta em branco.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Erro ao compilar com o Xailer

Mensagem por gilsonpaulo »

Estou tentando gerando uma lib.

Gostaria de saber o porque desse erro, pois no clipper não ocorre.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Erro ao compilar com o Xailer

Mensagem por sygecom »

Não são erros e sim Warnings (Avisos apenas)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Erro ao compilar com o Xailer

Mensagem por gilsonpaulo »

Gostaria de saber o que são estes avisos, e deque forma eles poderiam gerar algum tipo de problema.

Segue o prg com o a linha original do erro, este que postei acima foi alterado.

Código: Selecionar todos

/******************************************************************************
*		  LHASA -  RUNTIME LIBRARY PARA DESENVOLVIMENTO DE APLICAیES		  *
* DESENVOLVIMENTO: LHASA Consultoria & Sistemas 	LINGUAGEM: Clipper 5.01   *
* DATA DE CRIA€ÇO: 05.10.91 						éLTIMA ALTERA€ÇO:		  *
* MODULO:  RVLMenu.prg	  - 	   FUN€ÇO: ROTINA GENRICA PARA MENU E OUTROS *
* DESENVOLV.: Ricardo von Linsingen 	   TIPOS DE ROTINA COM ESCOLHA EM TELA*
******************************************************************************/

#include "acesso.ch"

/*
 * EscCampo() - Mostra por ACHOICE o conteudo de pArray[ 2 ] ( Descricao ),
 *        para escolha, devolvendo o conteudo de pArray[ 1 ] ( codigo )
 *				selecionada.
 *
 *    pVarCod     -  Variavel passada como endere‡o
 *    pArray[1]   -  Nome da array com os codigos
 *                - O QUE OBTEMOS POR REFERENCIA
 *    pArray[2]   -  Nome da array com as descricoes
 *                - O QUE VEMOS
 */

FUNCTION EscCampo( pVarCod, pArray, pTop, pLeft, pBottom, pRight )

LOCAL tTotReg:=   LEN( pArray[1] )
LOCAL tEscolha
LOCAL wTela:=     SAVESCREEN( pTop, pLeft, pBottom, pRight )
LOCAL tCor:=      SETCOLOR( CorJan() )
LOCAL tBottom:=   IIF( tTotReg > ( pBottom - pStop -1 ) , ;
                       pBottom,                           ;  
                       pTop + pTotReg +1 )  //Aqui ocorre a warning

IF EMPTY( pVarCod )
   @ pTop, pLeft, pBottom, pRight BOX BoxFrame()
   RvlShadow( pTop, pLeft, pBottom, pRight )
   tEscolha:=  ACHOICE( pTop, pLeft+1, pBottom-1, pRight-1, pArray[2] )

   RESTSCREEN( pTop, pLeft, pBottom, pRight, wTela )

   IF ( tEscolha != 0 )
	  pVarCod:=   pArray [ 1 ] [ tEscolha ]
   ENDIF

  ELSE

   tEscolha:=	  ASCAN( pArray[1], pVarCod )
ENDIF

SETCOLOR( tCor )

RETURN( tEscolha != 0 )


/*
 * PullDown( pTop, pLeft, paMenu, pPrg, pDigitos )
 *
 *
 *	  pTop, pLeft	 :	Linha superior e coluna da esquerda
 *    paMenu       :  Array contendo as opcoes a serem mostradas
 *    pPrg         :  Nome do programa de menu que chama esta funcao
 *    pDigitos     :  Numero de digitos acrescentados a pPrg para a
 *                    formacao do nome do programa a ser chamado
 */


FUNCTION PullDown( pTop, pLeft, paMenu, pPrg, pDigitos )


LOCAL wTela, tPrg, tX
LOCAL wOpcao:= 0
LOCAL wNumOpcoes:= LEN( paMenu )
LOCAL aMenuAutorizado:= {}


   FOR tX:= 1 TO wNumOpcoes

	  IF Autorizado( paMenu[tX][2], MSG_NAO )
       AADD( aMenuAutorizado, { paMenu[tX][1], tX } )
	  ENDIF
   NEXT tX

   wNumOpcoes:= LEN( aMenuAutorizado )

   IF ( wNumOpcoes = 0 )
      Autorizado( paMenu[1][2], MSG_SIM )
	 ELSE
      @ pTop, pLeft, pTop + wNumOpcoes +1,;
              pLeft + LEN( aMenuAutorizado[1][1] ) +1;
              BOX BoxFrame()



      RvlShadow( pTop, pLeft, pTop + wNumOpcoes +1,;
                 pLeft + LEN( aMenuAutorizado[1][1] ) +1 )
   ENDIF


   WHILE ( wNumOpcoes > 0 )

         SETCOLOR( CorMenu() )

         FOR tX:= 1 TO wNumOpcoes
             @ pTop + tX, pLeft + 1 PROMPT aMenuAutorizado[tX][1]
         NEXT tX

         MENU TO wOpcao

         wTela:= SAVESCREEN( 0, 0, MAXROW(), MAXCOL() )

         IF ( LASTKEY() = ESCAPE ) .OR. ( wOpcao = 0 )
            EXIT
          ELSE  // IF (wOpcao>=1 .and. wOpcao<= NumOpcoes ) ( faixa abrangida )
            tPrg:= pPrg + STRZERO( aMenuAutorizado[wOpcao][2], pDigitos )
            &Tprg.()
         ENDIF

         CLEAR TYPEAHEAD
         RESTSCREEN( 0, 0, MAXROW(), MAXCOL(), wTela )
   ENDDO

RETURN( NIL )


/*
 * CHOOSE()    -  Busca codeblock em arquivo e coloca conteudo em um array
 *                Mostra o conteudo do array por achoice()
 *
 *    pBlkCond    :  Bloco com a condicao para teste no Arquivo Selecionado
 *    pBlkLinha   :  Bloco com o conteudo que deve ter cada linha de Opcao
 *    pTop,
 *    pLeft,
 *    pBottom,
 *    pRight      :  Coordenadas de posicao em tela
 *    pInclui     :  Logico ( deve(.T.) ou nao(.F.) aceitar inclusoes )
 *    pBlkRet     :  Bloco com o conteudo a ser retornado. Se = NIL, RECNO()
 *
 */


FUNCTION Choose( pBlkCond, pBlkLinha, pTop,    pLeft,  ;
                 pBottom,  pRight,    pInclui, pBlkRet ;
               )

LOCAL wTotReg:=   0, tEscolha:= 0, tBottom
LOCAL tInclui:=   IIF( pInclui = NIL, .T., pInclui )
LOCAL aSalva:=	  { {}, {} }
LOCAL wTela:=     SAVESCREEN( pTop, pLeft, pBottom, pRight )
LOCAL tCor:=      SETCOLOR( CorJan() )
LOCAL tBlkRet:=   IIF( pBlkRet = NIL, { || RECNO() }, pBlkRet )

   IF ( !EOF() )

	  WHILE ( !EOF() .AND. EVAL( pBlkCond ) )

		 wTotReg++
		 AADD( aSalva[1],  EVAL( pBlkLinha ) )
		 AADD( aSalva[2],  EVAL( tBlkRet )	 )

		 SKIP
	  ENDDO

	  IF tInclui

		 wTotReg++
		 AADD( aSalva[1],  PADC( "*** INCLUI OUTRO REGISTRO ***",;
								 pRight-pLeft, "" ))
		 AADD( aSalva[2],  0 )

		 SKIP
	  ENDIF

	  tBottom:=   IIF( wTotReg > ( pBottom - pTop -1 ), pBottom,;
					   pTop +wTotReg + 1 )

	  @ pTop, pLeft, tBottom, pRight BOX BoxFrame()
    RvLShadow( pTop, pLeft, tBottom, pRight )

	  tEscolha:= ACHOICE(  pTop +1, pLeft +1, tBottom -1,;
						   pRight -1, aSalva[1], .T., )

	  RESTSCREEN( pTop, pLeft, pBottom, pRight, wTela )

	  IF (( tEscolha = wTotReg ) .AND. ( tInclui )) .OR. ( tEscolha = 0 )
		 GO BOTTOM						  // Se inclui ou ESC, vai para eof
		 SKIP							  // se pBlkRet (codblock) nÆo ‚ pas-
		ELSEIF ( pBlkRet = NIL )		  // sado como parƒmetro, posiciona no
     GO aSalva[2][tEscolha]       // recno() escolhido, devolvendo nu-
		ELSE							  // mero escolhido se passar, devolve
     tEscolha:= aSalva[2][tEscolha]   // o conteudo do mesmo
	  ENDIF
   ENDIF

   SETCOLOR( tCor )

   RETURN( tEscolha )


/*
 * GetNewOrder()  -  Procura o ultimo item do campo-de-ordem ( sequˆncia )
 *           e devolve o valor do ultimo incrementado de 1, a partir
 *					 do registro corrente. Depois vai para o fim do Arquivo.
 *
 * pBlkCond -  Bloco com a condicao para teste no arquivo selecionado
 *
 * pBlkRet	-  Bloco com o campo de ordem
 *
 */


FUNCTION GetNewOrder( pBlkCond, pBlkRet )

LOCAL	 tOrdem:= EVAL( pBlkRet )

   WHILE ( EVAL( pBlkCond ) .AND. !EOF()) .AND. ;
		 ( VAL( EVAL( pBlkRet )) <= VAL( tOrdem ) + 1 )

	  tOrdem:= EVAL( pBlkRet )
	  SKIP
   ENDDO

   GO LASTREC() + 1 	// VAI PARA O FIM DO ARQUIVO - INCLUSÇO

   RETURN( STRZERO( VAL( tOrdem ) +1, LEN( tOrdem )))


// eof - RVLMenu.prg

* PRG...................: Spacing
* CLASSE................: Espacejamento
* PREFIXO...............: Spa
* EXPORTA...............: Spa_Spacing()
* CONSTRUTORA...........:
* DESTRUTORA............:
* USA...................:
*
* COMENTARIOS...........: Compilar com /a /m /n /w
* NUMERICO[] spa_spacing(texts, l, r)
* CARACTERE  texts[] - Textos a espacejar
* NUMERICO   l, r    - entre estas duas colunas
* RETURN:    Vetor de colunas iniciais
*            Determina coluna inicial para cada texto, espacado uniformemente
*            entre l e r
*

FUNCTION RvlSpacing( aTextos, nLeft, nRight )

LOCAL    nSumLens,  nTextNum, nSpacesBetween, ;
         aCols:=    ARRAY( LEN( aTextos ))

*  Determina o tamanho total das mensagens
nSumLens:= 0
FOR nTextNum:= 1 TO LEN( aTextos )
    nSumLens +=  LEN( aTextos[nTextNum] )
NEXT

*  Quantidade de espacos entre itens
nSpacesBetween:= INT((( nRight - nLeft +1 ) - nSumLens ) / ;
                      ( LEN( aTextos ) +1 ))

*  Primeira posicao nao e conhecida
aCols[1]:=  1 + nSpacesBetween

*  Determina outros a partir desta
FOR nTextNum:= 2 TO LEN( aTextos )
    aCols[nTextNum]:=  aCols[nTextNum -1] + ;
                       LEN( aTextos[nTextNum -1] ) + ;
                       nSpacesBetween
NEXT

RETURN aCols
* : : : : :

FUNCTION RvlPrompt( cTexto )

@ 01,00 SAY REPLICATE( CHR(32), 80 )
@ 01,05 SAY cTexto

RETURN NIL
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Erro ao compilar com o Xailer

Mensagem por sygecom »

Gilson,
Gere a LIB usando o hbmake, e veja se acontece a mesma coisa.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Erro ao compilar com o Xailer

Mensagem por gilsonpaulo »

Obrigado pela ajuda, realmente, mesmo com as warnings a lib foi e gerada e funciona normalmente.
Reginaldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 71
Registrado em: 14 Jul 2004 08:06
Localização: Lagoa da Prata - MG
Contato:

Re: Erro ao compilar com o Xailer

Mensagem por Reginaldo »

Caro Gilson,

Esses "Warnings" significam que pode haver ambiguidade com essas variáveis, pois, você não as declarou como LOCAL, GLOBAL, PUBLIC, PRIVATE, etc... (No caso de variáveis PUBLIC o xailer também gera "warnings", pois no xailer tem uma classe, onde você instancia e nela coloca as variáveis públicas do sistema, então, se declarar variáveis PUBLIC, também terá "warnings")

Na minha opinião, essa verificação (de ambiguidade) o velho Clipper já deveria fazer, pois evita problemas que podem ocorrer, por exemplo quando se declara uma variável PUBLIC e numa função qualquer do sistema, você dá outra valor a essa mesma variável, sem saber que ela é publica...

Bom, nem o xHarbour faz essa verificação, mas, como o xailer é utilizado com um xHarbour "otimizado para xailer", creio eu, que essa é umas das "otimizações" que eles colocaram....

Essa verificação é bastante interessante, visto que as variáveis do xharbour, assim como no clipper, são tipadas dinamicamente, e quem sabe os programadores do xharbour, não a implementam numa próxima versão do compilador...

Espero ter ajudado,

Atenciosamente,
Reginaldo J. Silva
Analista de Sistemas
Avatar do usuário
mhackervix
Usuário Nível 3
Usuário Nível 3
Mensagens: 105
Registrado em: 11 Fev 2008 02:06
Localização: ES

Re: Erro ao compilar com o Xailer

Mensagem por mhackervix »

A utilização de tipagem para indicar se a expressão (literais) é uma variável de MEMória ou um Campo (do DBF) elimina estes avisos de atenção. Ou seja, declare dentro da função se as Literais são campos ou variáveis.

att.
Mhackervix, Msc.
Responder