I was not able to run your code, but I think the compilation problem is because you created a struct
and made it a "type" for variables, using the typedef
setting, however, when declaring a variable with the type created, you wanted to declare it as a simple structure.
When we declare a struct
we can observe the following declaration rule:
struct <identificador>
{
<listagem dos tipos e membros>;
} <variavel>
where:
<identificador>
is the name given to struct, to be able to identify the structure we are creating;
<variavel>
is the declared variable itself;
Example:
/*declaracao da estrutura*/
struct ANIMAL
{
int patas;
char raca[10];
} gato // voce criou um variavel gato com a estrutura de um ANIMAL;
Or we can do it this way:
/*declaracao da estrutura*/
struct ANIMAL
{
int patas;
char raca[10];
}
/*declaracao da variavel*/
struct ANIMAL gato; // voce criou um variavel gato com a estrutura de um ANIMAL;
When you make a structure a type, using typedef
, you make this structure a known type for your program, as if it were a primitive type (int, char, float), that is, in your program , the structure you defined as a type, using typedef
, is now a type for variables. The structure, for use with typedef
, works like this:
typedef < tipo > <nome_para_o_tipo>
where:
< tipo >
is the type that will be "renamed", which can be an existing type (int, char, float, etc), or a complex type (structs, enuns, ect);
<nome_para_o_tipo>
is the name you give the type;
See an example below:
/* Aqui, estamos dizendo que o tipo int também será conhecido, pelo o programa, como int32*/
typedef int int32; // definição do tipo int32
int32 cont; // declaração da variável "cont" do tipo int32 (que na verdade é um int)
For a structure it will look like this:
/*Tranformando uma estrutura em um tipo*/
typedef < tipo >
{
<listagem dos tipos e membros>;
} <nome_para_o_tipo>
Example:
/*Aqui estamos tornando uma estrutura em um tipo complexo*/
typedef struct ANIMAIS
{
int patas;
char raca[10];
} ANIMAL // estamos dizendo que a struct ANIMAIS será conhecida, no programa, como o tipo complexo ANIMAL;
ANIMAL gato; // criamos uma variável gato do tipo complexo ANIMAL. como a estrutura virou um tipo, não é necessário colocar o struct antes do ANIMAL.
Well, so, I think the corrections to be made in your program are as follows:
typedef struct Fila {
int vetor[3][10];
int tamanho[3];
} FILA;
void fLimpar(int a, FILA *Carro);
void fArmazenar(int a, FILA *Carro, int e);
int fRemover(int a, FILA *Carro);
int Menu(struct carros *carro,FILA *Carro);
void fArmazenar(int a, FILA *Carro, int e) {
// Armazena o elemento na próxima posição vaga.
(*Carro).vetor[a][((*Carro).tamanho[a])] = e;
printf("teste : ta com %d", (*Carro).vetor[a][(*Carro).tamanho[a]]);
(*Carro).tamanho[a]++;
}
int fRemover(int a, FILA *Carro) {
int e, i;
// elemento a ser retornado é o primeiro da fila.
e = (*Carro).vetor[a][0];
// Move todos os elementos 1 posição para frente,
// exceto o 1º (pois este será descartado).
for (i = 1; i < (*Carro).tamanho[a]; i++) {
(*Carro).vetor[a][i - 1] = (*Carro).vetor[a][i];
}
// diminui o tamanho em 1 porque o elemento do início da fila foi removido.
(*Carro).tamanho[a]--;
return e;
}
Here are links to find more details about structs and typedef: structs and typedef
Or you can declare the structure without typedef
and variable FILA
, so you do not have to change the rest of your program:
struct Fila {
int vetor[3][10];
int tamanho[3];
};
Another thing you can check is whether the variable Carro
, which you are passing by parameter for the fArmazenar(int a, FILA *Carro, int e)
and fRemover(int a, FILA *Carro)
functions, is a value or an address. This error, which the compiler is reporting, is typical of this type of error. You may be wanting to pass a parameter by value, however, the functions are expecting to receive a parameter by reference (a memory address).
Anyway, check this out, or drop the rest of the code where you call these functions so we can see how you are declaring the Car variable and how you are passing parameters to the functions.