1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Estrutura em C

Discussão em 'Programação' iniciada por Simao, 18 de Novembro de 2006. (Respostas: 6; Visualizações: 2298)

  1. Simao

    Simao Power Member

    Boas,

    Estou com um problema em C.

    Eu estou a usar o seguinte código:

    Código:
    typedef struct {  int value;
    	ELEMENT* next;
    } ELEMENT;
    
    Eu não percebo porque é que fico com o seguinte erro:

    Em linux:

    Código:
    teste.c:2: error: parse error before "ELEMENT"
    teste.c:2: warning: no semicolon at end of struct or union
    teste.c:3: warning: data definition has no type or storage class
    
    Em windows:
    Código:
    teste.c:2: error: expected specifier-qualifier-list before 'ELEMENT'
    
    Alguém sabe qual é a causa?

    Obrigado
     
  2. jaac

    jaac Power Member

    Código:
    typedef struct {  int value;
    	[COLOR="Red"]struct[/COLOR] ELEMENT* next;
    } ELEMENT;
    Assim funciona :)
     
  3. Simao

    Simao Power Member

    Hum, yah funcionou =)

    Obrigado pela ajuda.

    Podes explicar pk eh ke tem k te la o struct?
     
  4. Simao

    Simao Power Member

    Hum agora tenho outro problema :\

    Código:
    
    typedef struct {
    	tElement element;
    	struct tSLLNode* nextNode;
    } tSLLNodeMem, *tSLLNode;       
    
    
    typedef struct {
       tSLLNode head;
       tSLLNode tail;
       tSLLNode size;
       
       int (*compare) (void *, void *);
    } tSLLMem, *tSLL;
    
    
    Eu quero ke o nextNode seja um tSLLNode, ou seja, nextNode tem que ter o mesmo tipo k head, o que não está a acontecer.

    Esta-me aqui a escapar alguma coisa, ja experimentei usar o tSLLNodeMem* na primeira estrutura, mas n da.

    Eu penso ke a sintaxe correcta seria:

    Código:
    typedef struct {
    	tElement element;
    	struct tSLLNode nextNode;
    } tSLLNodeMem, *tSLLNode;       
    
    Não funca....

    Obrigado
     
  5. souto

    souto To fold or to FOLD?

    tens que declarar o tipo da variavel, tal como quando declaras um int, por exemplo.
    nesse caso, o tipo de variável é struct

    cumprimentos.
     
  6. TuxBoss

    TuxBoss Power Member

    Não coloques o struct.

    typedef struct
    {
    tElement element;
    tSLLNode nextNode;
    } tSLLNodeMem, *tSLLNode;

    Ao teres definido o *tSLLNode o compilador já sabe que esse tipo aponta para um apontador do tipo tSLLNodeMem, logo não precisas de indicar que se trata de um apontador para uma struct como anteriormente.

    Aliás é uma boa prática de programação definir sempre (em que tenhas de utilizar apontadores) definir o tipo de apontador para estruturas quando estas são declaradas.
     
  7. Simao

    Simao Power Member

    Yah, eu tb achava que sim, mas assim recebo o erro:
    sll.h:20: error: expected specifier-qualifier-list before 'tSLLNode'


    =\ Obrigado
     

Partilhar esta Página