“paramètre a incomplète de type” avertissement

J'ai ceci dans un fichier C:

struct T
{
    int foo;
};

le fichier C a un include d'un h fichier avec ces lignes:

typedef struct T T;
void listInsertFirst(T data, int key, LinkedList* ListToInsertTo);

la fonction listInsertFirst est celui que je reçois le message d'avertissement sur le. Comment puis-je résoudre ce problème?

  • merci,et si je veux que le type de knonwn si quelqu'un comprend le h de fichier ?
  • Une chose que vous devez être conscient, c'est que vous êtes en passant un struct en valeur ici. C'est presque certainement une mauvaise idée...
  • Aucune raison pourquoi vous êtes typedef-ing dans le fichier C plutôt que dans le fichier d'en-tête. Aussi, vous pouvez typedef struct directement par avoir quelque chose comme struct { T, int toto;} T;
  • Ce paramètre est le compilateur de référence?
  • Je ne suis vraiment pas sûr de ce qui est la bonne chose à faire lors de la mise en œuvre (n'importe quel dictionnaire comme) DS:si la personne qui a appelé la fonction d'insertion ne l'allocation de mémoire et de passer un pointeur,ou doit-il passer de l'objet et de la fonction insérer devrait faire l'allocation ?
  • Mercado je ne suis pas sûr (il n'est pas dit), mais je pense que c'est le paramètre de type T
  • Eh bien, si struct T est en fait défini quelque part, alors cela ne devrait pas être un problème. Est la définition de struct T dans le fichier avant de vous avez défini le type de typedef struct T T; ou est-il réellement dans un autre fichier? Ou est-il dans un en-tête que vous n'avez pas vraiment comprendre?
  • Mercado j'ai déplacé le decleration à l'en-tête et c'est ok maintenant 🙂 mais je ne suis toujours pas sûr de ce que j'ai écrit dans mon commentaire précédent à Gangâdhar.pensées ?
  • Pour être honnête, je ne peux pas dire à coup sûr. Il n'y a pas suffisamment d'informations pour faire une bonne suggestion. Je ne sais pas comment vous avez mis en œuvre les choses. Même si, comme ça c'est un autre problème maintenant, vous devriez demander à ce sujet dans une nouvelle question (avec beaucoup plus d'informations à propos de vos types).
  • struct { int toto; } T;" avec votre premier T ("struct {T,...") n'est requis que si la structure a besoin de se référer à lui-même, comme "typedef struct Noeud { struct Noeud *suivant; } Noeud;".

InformationsquelleAutor Belgi | 2011-05-13