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
typedef struct { int value;
struct ELEMENT* next;
} ELEMENT;
Assim funciona :)
Hum, yah funcionou =)
Obrigado pela ajuda.
Podes explicar pk eh ke tem k te la o struct?
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
tens que declarar o tipo da variavel, tal como quando declaras um int, por exemplo.
nesse caso, o tipo de variável é struct
cumprimentos.
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.
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