Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
na.vicente

File of - Arquivos

Recommended Posts

Queria declarar um registro e depois declarar um arquivo como file of do registro, mas dá erro na compilação, olha como tá:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
arquivo=file of mago;
var
arquivo_entrada:arquivo;
arquivo_saida:arquivo;
temp:mago;
i,j,posmenor,n:integer;

O que tá errado? Como se declara uma estrutura desse tipo?

Editado por na.vicente

Compartilhar este post


Link para o post
Compartilhar em outros sites
Queria declarar um registro e depois declarar um arquivo como file of do registro, mas dá erro na compilação, olha como tá:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
arquivo=file of mago;
var
arquivo_entrada:entrada;
arquivo_saida:arquivo;
temp:mago;
i,j,posmenor,n:integer;

O que tá errado? Como se declara uma estrutura desse tipo?

Olá...

Compile, veja qual a mensagem do erro... analise-a e corrija o código.

PS: Se tiver em inglês, qualquer coisa usa o Google Translator.

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro é esse:

questao2.lpr(9,22) Error: Typed files cannot contain reference-counted types.

Mas porque diz que registros não podem ser usados em registros se eu já fiz isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na,

Tente dar um limite para o campo nome no seu registro. Ex:

nome:string[80];

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro não é mais na parte da string não é aqui:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
rank=file of mago;

Dá erro e diz que não pode usar registros como referencia para registros. Isso faz sentido?

Eu uso o Lazarus. Compilei no dev-pascal aqui e essa parte diz que não deu erro mas deu erro aqui


append(arquivo_saida);

No append diz que a variável deveria ser text. O que é isso??

Editado por na.vicente

Compartilhar este post


Link para o post
Compartilhar em outros sites

PARTE 1 (fiz antes da resposta de na.vicente - preferi manter)

1) Sobre minha sugestão de analisar o erro informado

Olá...

Compile, veja qual a mensagem do erro... analise-a e corrija o código.

PS: Se tiver em inglês, qualquer coisa usa o Google Translator.

No aguardo.

De modo geral, essa dica é sempre válida... ^_^ mas eu estava me baseando por um "erro" relativamente mais simples que tinha encontrado na sua postagem inicial, já que corrigindo isso resolvia o problema...

var
[B] arquivo_entrada:entrada;[/B]
arquivo_saida:arquivo;

Ou seja, estava utilizando entrada em vez de arquivo.

Obs.: Na sua postagem essa questão já está corrigida. (por você mesmo, correto?)

2) Analise do erro

O erro é esse:

questao2.lpr(9,22) Error: Typed files cannot contain reference-counted types.

Mas porque diz que registros não podem ser usados em registros se eu já fiz isso?

Pesquisando na internet sobre a extensão ".lpr", encontrei referências sobre o Lazarus IDE. Baixei, e testei o seu código... e ocorreu o mesmo erro citado por você...

Fiz alguns testes... e cheguei a seguinte conclusão: O problema está numa configuração ou "limitação" da IDE (do Lazarus), pois testei o mesmo compilador, o Free Pascal Compiler 2.6.2, dele e com o mesmo código no meu NotePad++ e rodou normalmente... :huh:

3) Limitação de campo

Na,

Tente dar um limite para o campo nome no seu registro. Ex:

nome:string[80];

Testei essa sugestão de LNW e funcionou...

Resumindo: Por algum motivo que não consegui descobrir ainda (estou na curiosidade), o Lazarus, apesar de usar o FPC 2.6.2, não aceita essa declaração de file of string... no caso o programador fica "obrigado" a delimitar o tamanho da String, ex.: file of string[X], onde "X" varia de 1 a 255.

Obs.1: Realmente não entendi mesmo, já que na minha cabeça quando não é especificado, a String fica com 255, ou seja, o mesmo que String[255].

Obs.2: No seu contexto, a string está dentro do record, basta inseri o tal [X] da mesma forma... (cai na mesma regra)

***

PARTE 2 (respondendo a nova postagem)

1) Erro anterior

O erro não é mais na parte da string não é aqui:


type
mago=record
nome:string;
a:integer;
v:integer;
d:integer;
end;
rank=file of mago;

Dá erro e diz que não pode usar registros como referencia para registros. Isso faz sentido?

Já comentei na parte 1... ou seja, para usar string como tipo do arquivo no Lazarus, você deve delimitar o tamanho das string... basta seguir a dica de LNW... (com valores entre 1 e 255)

2) Versão da IDE

Eu uso o Lazarus. Compilei no dev-pascal aqui e essa parte diz que não deu erro mas deu erro aqui

append(arquivo_saida);

No append diz que a variável deveria ser text. O que é isso??

Comentei também na primeira parte... o problema deve estar na IDE, e não no compilador que ela usa...

Em relação ao append(), é que esse comando não funciona para variáveis do tipo File, ela é para Text mesmo... Observe que existem algumas diferenças entre File e Text... cada um tem as suas características (Google, mas qualquer coisa estamos aqui^_^).

Você deve usar outro comando... Por exemplo, se você quer posicionar no início do arquivo, você poderia usar o Seek(VARIÁVEL_DO_ARQUIVO,0) (o arquivo já tem que está aberto ;)).

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×