'struct <anonyme>" n'a pas de membre nommé
La recherche de la façon de référence du noeud et le régler à la valeur null pour la création de la fonction. Toutes les suggestions de cette sortie donnée de mettre de l'avant et à l'arrière des nœuds dans la file d'attente à NULL?
gcc -std=c99 -ggdb -Wall -Wextra -c queueADT.c
queueADT.c:13:1: warning: useless storage class specifier in empty declaration [enabled by default]
};
^
queueADT.c: In function 'que_create':
queueADT.c:36:6: error: 'struct <anonymous>' has no member named 'front'
new->front = NULL;
^
queueADT.c:37:6: error: 'struct <anonymous>' has no member named 'rear'
new->rear = NULL;
^
queueADT.c:38:8: error: expected identifier before '*' token
new->*cmprFunc = NULL;
Ici est la partie principale du code qui a causé l'erreur. (2 structures )
typedef struct node {
void* data;
//size_t num;
struct node *next;
};
struct QueueADT {
struct node front; /* pointer to front of queue */
struct node rear; /* pointer to rear of queue */
int *contents[ QUEUE_SIZE ]; /* number of items in queue */
int *cmprFunc; /* The compare function used for insert */
};
#include "queueADT.h"
///create a queue that is either sorted by cmp or FIFO
//function with two void
QueueADT que_create( int (*cmp)(const void*a,const void*b) ) {
QueueADT new;
new = (QueueADT)malloc(sizeof(struct QueueADT));
if (cmp == NULL) {
//do I create a new pointer to the cmp_int64?
new->front = NULL;
new->rear = NULL;
new->*cmprFunc = NULL;
} else {
new->*cmprFunc = &cmp;
new->front = NULL;
new->rear = NULL;
}
return ( new );
}
typedef struct node {...};
<-- où est l'alias? Pourquoi le typedef
? Vous êtes également le casting du retour de malloc
est une drôle de façon: (QueueADT)malloc();
<-- malloc
retourne un pointeur, mais il n'y a pas typedef
de cette QueueADT
d'être vu. Enfin: new
n'est pas un grand var nom: vous ne serez pas en mesure de compiler ce code s'il fait partie d'un projet C++ Je crois que vous vouliez dire
int *cmprFunc(struct node*, struct node *)
Mon .h fichier a QueueADT écrit comme 'typedef struct { } *QueueADT;'
pas de la const void* est un type abstrait de données
Le fichier d'en-tête
typedef
'un anonyme struct comme *QueueADT
, mais le fichier C définit un struct QueueADT
avec les membres front
et rear
, les deux sont différents des structures entièrementOriginalL'auteur arrowinfedex | 2014-10-30
Vous devez vous connecter pour publier un commentaire.
Cela ressemble invalide pour moi:
Peut-être vous avez besoin de ceci:
Et:
devrait probablement être
Et la
typedef
ici est inutile, il doit être retiré:Autre question: ces deux déclarations en
struct QueueADT
l'air suspect pour moi:new->front
ne peut pas être défini àNULL
parce que le membre est déclaré commestruct node front;
(pas un pointeur)Vous avez raison, il semble OP raté le
*
Mon .h fichier a QueueADT écrit comme
typedef struct { } *QueueADT
qui donne le erreurqueueADT.h:23:21: error: conflicting types for 'QueueADT' typedef struct { } *QueueADT; ^ queueADT.c:21:3: note: previous declaration of 'QueueADT' was here }*QueueADT; ^
Mise à jour de votre question avec cette information.
Effectivement sa a résolu, merci à vous
OriginalL'auteur Jabberwocky
typedef
detypedef struct node {..
struct QueueADT {//body};
àtypedef struct
{//body}QueueADT;
QueueADT new;
shoule êtreQueueADT *new;
et ainsi de suite..
OriginalL'auteur Sourav Ghosh