View Full Version : Estrutura em C


Simao
19-11-2006, 00:43
Boas,

Estou com um problema em C.

Eu estou a usar o seguinte código:


typedef struct { int value;
ELEMENT* next;
} ELEMENT;


Eu não percebo porque é que fico com o seguinte erro:

Em linux:


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:

teste.c:2: error: expected specifier-qualifier-list before 'ELEMENT'


Alguém sabe qual é a causa?

Obrigado

jaac
19-11-2006, 00:54
typedef struct { int value;
struct ELEMENT* next;
} ELEMENT;

Assim funciona :)

Simao
19-11-2006, 01:04
Hum, yah funcionou =)

Obrigado pela ajuda.

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

Simao
19-11-2006, 01:37
Hum agora tenho outro problema :\



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:


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


Não funca....

Obrigado

souto
19-11-2006, 01:38
tens que declarar o tipo da variavel, tal como quando declaras um int, por exemplo.
nesse caso, o tipo de variável é struct

cumprimentos.

TuxBoss
19-11-2006, 14:30
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.

Simao
19-11-2006, 17:26
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.

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


=\ Obrigado