Des erreurs de redéfinition .h fichiers
//list.h file
typedef struct _lnode{
struct _lnode *next;
size_t row;
size_t column;
short data;
}lnode;
typedef struct _llist{
struct _lnode *head;
size_t size;
}llist;
//matrix.h file
typedef struct _matrix{
size_t width;
size_t height;
size_t k;
int **data;
}matrix;
//smatrix.h file
#include "list.h"
#include "matrix.h"
typedef struct _smatrix{
size_t width;
size_t height;
size_t k;
llist data;
}smatrix;
smatrix* make_smatrix(matrix *m);
smatrix.h fichier comprend la liste.h de fichier et de la matrice.h fichiers. Si je comprend ces fichiers d'en-tête dans smatrix.h de fichier puis-je obtenir
redefinition of 'lnode'. redefinition of '_llist' and redefinition of '_matrix' errors.
Si j'ai pris ces heder fichiers notre de smatrix.h fichier puis l'erreur est allé loin, mais il se plaint de type matrice, dans le paramètre de la fonction. Je veux appeler des fonctions définies dans la liste.h et la matrice.h les fichiers dans smatrix.fichier c.. Que dois-je faire? Merci d'avance..
OriginalL'auteur codereviewanskquestions | 2011-03-25
Vous devez vous connecter pour publier un commentaire.
Possible problème de plusieurs inclusions.
Essayez de protéger vos fichiers d'en-tête avec
de la liste de fichiers.h
fichier de la matrice.h
Elle permettra d'éviter vous aussi, vous avez des redéfinitions si vous avez une boucle dans l'en-tête des inclusions.
Édité
Vous bienvenue @LCYSoft
OriginalL'auteur M'vy
vous avez besoin inclure des gardes dans vos fichiers d'en-tête.
OriginalL'auteur akira
Bien à partir de votre affiché le code, je pense que ce qui manque, c'est au début de chaque *.h fichier:
ou un
si votre compilateur prend en charge.
Sans cela, si l'en-tête est inclus plusieurs fois à partir de diverses sources, vous obtenez des erreurs relatives à la redéfinition.
OriginalL'auteur ds27680
Vous avez probablement inclure
smatrix.h
etlist.h
dans un autre fichier. Vous devriez éviter. La manière habituelle de le faire est d'utiliserinclude guards
.Ce sont des macros que vous vérifiez avec
#ifdef
au début du fichier (avec#endif
à la fin), et#define
eux à l'intérieur de la#ifdef ... #endif
, donc s'assurer que, même si vous incluez plusieurs fois le même fichier, le compilateur ne lire qu'une fois, à la première fois, et ignorer tout le reste.OriginalL'auteur littleadv