Alguem sabe fazer isto em VS2005 ?( C )

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Alguem sabe fazer isto em VS2005 ?( C )

Mensagempor Red_Beret » Sexta Jan 20, 2006 15:04

Ppl, alguem sabe fazer isto em VS2005

Código: Seleccionar todos
void preencher(){
   int l,b,c;
   long a;
   time(&a);
   srand ((unsigned) a);
   for(l=0;l<21;l++){
      for(c=0;c<21;c++){
         b=rand()%31;
         matriz[l][c]=b;
      }
   }
}


Como é obvio, isto é so um pedaço do programa. É para preencher uma matriz com nºs aleatorios. Funciona perfeitamente nas versoes anteriores do VS. Mas no 2005 da sempre o erro

Error 1 error C2664: 'time' : cannot convert parameter 1 from 'long *' to 'time_t *' c:\....cpp 10



Ja me disseram que tinha algo a ver com o VS 2005 estar a tentar fazer isso em 64 bits, e que havia maneira de o por a fazer isso em 32 bits. Mas não percebi muito bem como era.
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor Cannibal_Devil » Sexta Jan 20, 2006 19:48

Penso que isso tem somente a ver com o compilador e com a versão das bibliotecas standarts que ele tem que devem diferenciar um pouco.

Assim sendo e pelo erro que está a dar, a função time recebe como parametro um apontador para uma estrutura time_t e não um long.

Agora o que tens que fazer é criar uma estrutura time_t, para isso vai ver o manual da função time e do time_t. Depois de criares bem essa estrutura ela vai receber o valor que pretendes e depois passas como tens feito no srand.

Resumindo crias uma estrutura time_t, fazes malloc dela ou não??? e deixas o resto do código como já tens.

time_t *a;
malloc(a,sizeof(time_t));
time(a);

Se nao estiver errado deve ser uma coisa assim parecida se não for preciso o malloc então deve ser assim:

time_t a;
time(&a);

Depois diz qualquer coisa.
Vamos todos para o PARAÍSO porque o INFERNO é aqui! :)
Cannibal_Devil
Novato
Novato
 
Mensagens: 13
Registado: Sábado Set 27, 2003 17:52
Localização: Leiria / FCT-UNL Caparica

Mensagempor Red_Beret » Sábado Jan 21, 2006 10:59

no Max-PT responderam-me isto
Darklord Escreveu:
I've run into the same thing and have reverted back to VC6 for this
and other reasons. One change that might be really signitificant is
that the time_t is now a 64 bit number and that "time()" doesn't
return seconds since the epoche by default any more. You can force it
to be 32 bits again but, you have to define:

#define _USE_32BIT_TIME_T

in every situation where you use "time" and time_t's. The default
structure alignment is different between VC6 and VS2005 as well.


http://blog.gmane.org/gmane.comp.db.sql ... y=20060101

Em alternativa, podes tentar mudar a variavel a para long long ou double, embora não tenha a certeza de funcionar.

Lembra-te é de mudar o cast do srand para unsigned int (doubles não teem unsigned).


agora a duvida é, onde é que se poe essa linha de codigo?
Imagem
Red_Beret
Membro Vitalício
Membro Vitalício
 
Mensagens: 2334
Registado: Sexta Set 17, 2004 11:13

Mensagempor deathseeker25 » Sábado Jan 21, 2006 22:03

No cabeçalho então. Estás a criar um define ou seja uma macro...

Vai aqui que o pessoal dá-te uma ajuda em alguns minutos...
Imagem
deathseeker25
Membro de Prata
Membro de Prata
 
Mensagens: 153
Registado: Terça Set 20, 2005 14:09


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 2 visitantes

cron