c - Vetor de ponteiros em que cada elemento é uma fila - Stack Overflow em Português
Olá. Eu queria criar um vetor de ponteiros em que cada elemento apontasse para uma suposta fila, porém quando tento acessar o (vetor de ponteiros) -> (TAD fila) -> (vetor dentro do TAD fila), tenho problemas, ele não acessa.
typedef struct colegio { // vetor com 180 ponteiros
void *vetor_filas[180];
} Colegio;
typedef struct registro_fila { // fila com um vetor de 20 espaços
int qtd_pessoas[20];
Fila* criar_salas() { // criação do TAD fila, retorno ponteiro tipo Fila*
Fila *nova_fila;
nova_fila = (Fila*)malloc(sizeof(Fila));
void alocarColegiosSalas(Colegio *colegio) { // aloca as filas nos 180 vetores
while (i < 180) {
colegio->vetor_filas[i] = criar_salas();
Colegio *novosColegios;
alocarColegiosSalas(novosColegios);
novoColegio->vetor_filas[0]->qtd_pessoas[0] = a;
// aqui ele pede um casting do tipo (Fila*) (warning), e avisa que não é uma estrutura nem união.
printf("%d\n", novoColegio->vetor_filas[0]->qtd_pessoas[0]);
// avisa que a estrutura é algo que não é um estrutura nem união.
Acredito estar fazendo algo errado nas estruturas, ou algo do tipo.
Carter MarioCarter Mario
Ele não faz nada porque novoColegio->vetor_filas[0] tem tipo void *. novoColegio->vetor_filas[0] nada sabe do que qtd_pessoas se trata. Para melhorar o código, declare Fila antes de Colegio e declare, dentro de Colegio, Filas* filas[180]; em vez de void *vetor_filas[180];. – Marcelo Uchimura 28/05/18 às 0:03
Apenas reforçando o que @MarceloUchimura já disse, ponteiros do tipo void* não podem ser utilizados sem serem primeiro convertidos para outro tipo, pois o compilador não sabe de que tipo é o valor apontado. Por isso esta instrução colegio->vetor_filas[i] = criar_salas(); não irá funcionar. – Isac 28/05/18 às 10:26
Olá @MarceloUchimura, eu fiz o que você disse porém sem usar um ponteiro para a estrutura, simplesmente Filas fila[180], e dessa maneira consegui inserir os meus dados, porém me surgiu outra dúvida, em que caso, no qual eu tivesse estruturas aninhadas, eu precisaria, numa "passada" de uma estrutura para outra, usar o ponteiro? Abs. – Carter Mario 30/05/18 às 20:46
Para usar operador ->, o que está à esquerda dele deve ser um ponteiro, e o que está à direita, um campo de struct. – Marcelo Uchimura 30/05/18 às 20:54