Página 1 de 1

Error E0004 STATIC declaration follows executable...

Enviado: 04 Nov 2010 06:43
por Maya Fiuza
Olá Fórum!
The Compiler escreveu: xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6733)
Copyright 1999-2010, http://www.xharbour.org http://www.harbour-project.org/

Compiling 'master.prg'...

prgs\extra_a.prg(5) Error E0004 STATIC declaration follows executable statement
prgs\extra_b.prg(5) Error E0004 STATIC declaration follows executable statement
prgs\the_end.prg(5) Error E0004 STATIC declaration follows executable statement
O que poderia ser? Todas as rotinas que acusam o erro apontam a declaração STATIC abaixo, embora eu não encontre uma razão aparente...

Código: Selecionar todos

*-----------------------------------------------------------------------------------------------------------
  #include 'minigui.ch'
  #include 'winprint.ch'
*------
  STATIC lGridFreeze
*-----------------------------------------------------------------------------------------------------------
  FUNCTION xyz()
*-----------------------------------------------------------------------------------------------------------
  LOCAL cA, cB, cC, etc
Obrigada!

Re: Error E0004 STATIC declaration follows executable...

Enviado: 04 Nov 2010 10:15
por Maligno
Não há razão mesmo. O uso de static está correto, pela sintaxe XBase.

Re: Error E0004 STATIC declaration follows executable...

Enviado: 04 Nov 2010 10:43
por alxsts
Olá!

Talvez os arquivos include contenham executable statements.

Experimente mudar as declarações #include para depois da declaração LOCAL.

Re: Error E0004 STATIC declaration follows executable...

Enviado: 04 Nov 2010 10:59
por asimoes
Olá Maya,

Você usa o hbmake? ou bat própria de compilação?

Eu estava com um problema parecido com o xdev compilando com harbour quando a opção: Não definir função inicial automática, estava marcada como Não.

[]´s

Re: Error E0004 STATIC declaration follows executable...

Enviado: 04 Nov 2010 12:10
por Maya Fiuza
Puxa, mesmo mudando a localização dos "#includes", persiste o erro.
Não uso nenhum "make".
Segue em anexo meu .BAT de compilação, fico feliz se alguém puder dar uma olhada.
(xHb 1.2.1 + BCC 5.5 + Minigui 1.8.8)

Re: Error E0004 STATIC declaration follows executable...

Enviado: 05 Nov 2010 10:43
por alxsts
Olá!

Maya:

já experimentou comocar a Function Main() ao invés de Function xyz()?

Re: Error E0004 STATIC declaration follows executable...

Enviado: 05 Nov 2010 11:50
por rochinha
Amiguinhos,

É algum parametro na compilação que permite passar por isto, não lembro qual deles. As vez acontece comigo.

Minha solução rápida seria trocar STATIC por PUBLIC internalizando-as:

Código: Selecionar todos

*-----------------------------------------------------------------------------------------------------------
  #include 'minigui.ch'
  #include 'winprint.ch'

  STATIC lGridFreeze

  FUNCTION xyz()
  LOCAL cA, cB, cC, etc
Por:

Código: Selecionar todos

*-----------------------------------------------------------------------------------------------------------
  #include 'minigui.ch'
  #include 'winprint.ch'

  FUNCTION xyz()
  PUBLIC lGridFreeze

  LOCAL cA, cB, cC, etc
Este tipo de mensagem também ocorre quando usamos #INCLUDE para juntar .PRGs em tempo de compilação, exemplo:
PROGRAM1.PRG

Código: Selecionar todos

Static AlgumaVariavel

Function Calcula( a, b )
   return a + b
PROGRAMA.PRG

Código: Selecionar todos

Function main()
   ? Calcula( 2, 4 )
   return nil

#INCLUDE "PROGRAM1.PRG"
Neste caso esta mensagem aparecerá, já que as variáveis STATIC deveriam estar sempre no inicio do .PRG e quando a compilação mescla os dois .PRGs o que acontece é termos o código 2 abaixo do código 1 num único .OBJ.

Compile seu .PRG usando somente HARBOUR seuprg /n, para ver se passa.

Re: Error E0004 STATIC declaration follows executable...

Enviado: 05 Nov 2010 12:33
por alxsts
Olá!

No xHarbour existe um tipo de variável chamado GLOBAL. Tente usar.

Re: Error E0004 STATIC declaration follows executable...

Enviado: 05 Nov 2010 12:46
por Maya Fiuza
Olá!
A FUNCTION xyz() não é a principal, é só uma alusão há todas sub-rotinas que retornam o mesmo erro e são idênticas em cabeçalho.
Uso STATIC a nível de arquivos com "n" sub-rotinas ligadas/aninhadas e pela sua função.
Tenho contornando este inesperado probleminha substituíndo por PRIVATE, mas... Minha meta ficou aleijadinha.
Rochinha escreveu:"Este tipo de mensagem também ocorre quando usamos #INCLUDE para juntar .PRGs em tempo de compilação..."
Bingo!!! É o que faço aqui.
Uma sugestão de um "make" fácil de configurar e usar? Se tiver tutorial é tudo de bom!
Obrigada!

PS. Qual a diferença entre GLOBAL e PUBLIC?

Re: Error E0004 STATIC declaration follows executable...

Enviado: 05 Nov 2010 13:30
por asimoes
Maya,

Tente usar a minigui com harbour, você pode usar o hbmk2. Com o hmk2 você cria os seus scripts de compilação como no exemplo abaixo:
E também não há a necessidade de gerar as libs porque elas já vem compiladas, prontas para usar, sempre baixe pelo CVS.

Exemplo de uso:

D:\MINIGUI\HARBOUR\BIN\HBMK2 EXEMPLO.HBM

EXEMPLO.HBM

Código: Selecionar todos

# ---------------------------
# Nome do Executável
# ---------------------------
-oEXEMPLO
# ---------------------------
# Bibliotecas
# ---------------------------
-ltsbrowse
-lpropgrid
-lminigui
-lhmg_qhtm
-lminiprint
-lhbprinter 
-lgtgui
-llibct
-lhbnf
-ltip
-lxhb
-lhbwin
-lhtml
# ---------------------------
# Caminho dos Includes
# ---------------------------
-incpath=d:\minigui\include;d:\minigui\harbour\include
# ---------------------------
# Caminho das Libs da MiniGui
# ---------------------------
-Ld:\minigui\lib;d:\minigui\harbour\lib
# ---------------------------
# Outros Parâmetros
# ---------------------------
-workdir=.\OBJ\
-head=full
-gtgui
-icon=.\IMG\EXEMPLO.ICO
#-w
-n
#-dVERSAO_DE_TESTE1 Aplicação(*)
#-dVERSAO_DE_TESTE2 Aplicação(*)
-inc
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
exemplo
# exemplo.rc arquivo de recurso de imagens a serem usados pelo programa
d:\minigui\resources\miniprint.rc
# ---------------------------
# Fim
# ---------------------------
(*) Aplicação da diretiva de compilação:
#IFDEF VERSAO_DE_TESTE1
MsgInfo("VERSÃO DE TESTE 1")
#ENDIF
#IFDEF VERSAO_DE_TESTE2
MsgInfo("VERSÃO DE TESTE 2")
#ENDIF

Re: Error E0004 STATIC declaration follows executable...

Enviado: 06 Nov 2010 03:39
por rochinha
Amiguinhos,

Coloquei um conteudo que nos explica sobre os tipos de variáveis.