Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

jOrGe.mRNh

request for member x in something not a structure or union

Mensagens Recomendadas

jOrGe.mRNh    0
jOrGe.mRNh

Boas pessoal.

Estou a fazer um programa de gestão de uma empresa (algo simples claro) para um trabalho da escola, mas esta parte está me a dar erro. Podem-me dar uma ajudinha?

#define MAXARMAZEM 200

typedef struct item
{
    int tipo;
    char referencia[10];
    double preco;
} Item;

typedef struct armazem
{
    Item itm[MAXARMAZEM];
    int quantStock[MAXARMAZEM];
    int stockMedio[MAXARMAZEM];
    int stockMinimo[MAXARMAZEM];
} Armazem;

typedef struct encomenda
{
    int numEncomenda;
    int tipoProduto;
    char referencia[10];
    int quantidade;
    int quantiSatisfeita;
} Encomenda;

void dados (Armazem *armazem)
{
    armazem.itm [0] -> tipo = 1;
    armazem.itm [0] -> referencia = transistor;
    armazem.itm [0] -> preco = 0.54;
    armazem -> quantStock [0] = 10;
    armazem -> stockMedio [0] = 5;
    armazem -> stockMinimo [0] = 2;
}

O erro é:

request for member 'itm' in something not a structure or union|

request for member 'itm' in something not a structure or union|

'transistor' undeclared (first use in this function)|

(Each undeclared identifier is reported only once|

for each function it appears in.)|

request for member 'itm' in something not a structure or union|

Cumprimentos e muito obrigado :)

EDIT: Titulo modificado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

void dados (Armazem *armazem)
{
    armazem.itm [0] -> tipo = 1;

O erro é:

request for member 'itm' in something not a structure or union|

O armazem é um ponteiro (para dados de tipo Armazem).

Ponteiros não tem membros (armazem.itm seria o membro itm do ponteiro armazem). Precisas de aceder ao tipo Armazem e "depois" ao membro itm

*armazem é um objecto do tipo Armazem, por isso já tem membros

(*armazem).itm ok

Uma forma mais usual de dizer o mesmo é

armazem->itm também ok


Quanto ao transistor a mensagem é explicita: o identificador não foi declarado. O compilador não tem maneira de adivinhar se é um int ou um double ou ...


E ainda

armazem->itm[0]->referencia é um array. Não lhe podes atribuir valores directamente; precisas do strcpy() ou algo parecido.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg
    armazem -> itm [0] -> tipo = 1;
    /* armazem -> itm [0] -> referencia = transistor; */
    armazem -> itm [0] -> preco = 0.54;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Não faço ideia porque mas continua me a dar erro. Lool

Oops ... deixei-me influenciar pelo teu post inicial e nem olhei com atenção.

O membro itm é um array de Item, o codigo anterior funcionaria para um array de ponteiros para Item.

Deixo-te resolver o problema sozinho B)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Boas!

Muito obrigado pela ajuda, já resolvi o problema. Infelizmente agora apareceu-me outro. na parte da referencia (char), não me está a reconhecer o "transistor" como a referencia.

Aparece-me isto:

tico\TP - Gestor de Stocks\main.c|38|error: 'trnsistr' undeclared (first use in this function)|

tico\TP - Gestor de Stocks\main.c|38|error: (Each undeclared identifier is reported only once|

tico\TP - Gestor de Stocks\main.c|38|error: for each function it appears in.)|

Podes-me ajudar mais uma vez se faz favor?

Cumprimentos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Assumindo que o código é praticamente o mesmo, trocando os "->" e os ".", repara que não declaraste a variável "transistor" em lado nenhum. Mas isso já o pmg te tinha indicado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

não me está a reconhecer o "transistor" como a referencia.

tico\TP - Gestor de Stocks\main.c|38|error: 'trnsistr' undeclared (first use in this function)

Então ... mas é "transistor" ou "trnsistr"???

De qualquer maneira precisas de definir se é char, array de char, double ou outra coisa qualquer ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

É o mesmo. Eu é que alterei o nome desta vez para depois meter varios modelos.

Mas transistor não e uma variavel penso eu. É um valor certo que estou a atribuir a posiçao 0.

Eu vou pré introduzir uns 40 produtos. Se tiver que declarar todas as char (que neste caso e so referencia), isto fica um bocado complicado.

Podem-me dar uma ajudinha?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Mas transistor ... É um valor certo que estou a atribuir a posiçao 0.

Como é que estás a atribuir essa posição 0 (???) ao identificador "transistor"?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

armazem->itm[0].referencia = 0;

Ou fazes um define com o valor pré-definido:

#define DEFAULT_REF 0

armazem->itm[0].referencia = DEFAULT_REF;

Lembra-te é que aquilo é um array de chars e ao colocares lá o 0 é como dizeres que é uma string vazia.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

@KTachyon: não podes atribuir valores a um array; ou usas strcpy() ou alteras os elementos um-a-um

strcpy(armazem->itm[0].referencia, "FOOBAR");
armazem->itm[0].referencia[0] = '\0';

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jOrGe.mRNh    0
jOrGe.mRNh

Boas,

Parece que então estou a fazer isto tudo mal.

Como poderei eu fazer para associar a um sitio na memoria vários Produtos, cada um com referencia, preço, etc?

Neste caso isto é um pseudo-programa de gestao de stocks, e tenho que predefinir vários productos.

É para uma avaliação de inicio a linguagem C. Como já devem ter percebido eu não percebo grande coisa disto.

Se me pudessem ajudar agradecia.

Cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

Com base nesta struct

struct item {
    int tipo;
    char referencia[10];
    double preco;
};

podes declarar varios objectos:

struct item banana = {42, "BANANA", 1.15};
struct item peuga = {23, "PEUGAS", 6.66};
/* ... */

ou, talvez melhor, um array dessas estruturas:

struct item predefinido[100] = {
    {42, "BANANA", 1.15},
    {23, "PEUGAS", 6.66},
};

Depois podes copiar um item predefindo para um objecto duma vez so

armazem->itm[0] = predefinido[1];

ou aos bocadinhos

armazem->itm[0].tipo = predefinido[1].tipo;
strcpy(armazem->itm[0].referencia, predefinido[1].referencia);
armazem->itm[0].preco = predefinido[1].preco;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade