//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);
El archivo smatrix.h incluye los archivos list.h y matrix.h. Si incluyo esos archivos de encabezado en el archivo smatrix.h, obtengo
redefinition of 'lnode'. redefinition of '_llist' and redefinition of '_matrix' errors.
Si tomé esos archivos heder de smatrix.h, el error desapareció, pero se queja del tipo de matriz en el parámetro de función. Quiero llamar a las funciones definidas en los archivos list.h y matrix.h en el archivo smatrix.c … ¿Qué hago? Gracias por adelantado..
Posible problema de múltiples inclusiones.
Trate de guardar sus archivos de cabecera con
lista de archivos.h
#ifndef _LISTH_ #define _LISTH_ #endif
archivo matrix.h
#ifndef _MATRIXH_ #define _MATRIXH_ #endif
También evitará que tenga redefiniciones si tiene un bucle en las inclusiones del encabezado.
necesita incluir guardias en sus archivos de cabecera.
Bueno, desde su código publicado, lo que creo que falta es al principio de cada archivo * .h:
#ifndef _some_unique_identifier_for_each_header #define _some_unique_identifier_for_each_header ...header contents #endif //_some_unique_identifier_for_each_header
o un
#pragma once
Si tu comstackdor lo soporta.
Sin esto, si el encabezado se incluye varias veces de varias fonts, obtendrá errores relacionados con la redefinición.
Probablemente incluya smatrix.h
y list.h
en algún otro archivo. Debes evitar eso. La forma habitual de hacerlo es usar include guards
.
Estas son macros que se comprueban con #ifdef
al principio del archivo (con #endif
al final), y #define
#ifdef ... #endif
dentro de #ifdef ... #endif
, asegurando así que incluso si incluye el mismo archivo múltiple veces, el comstackdor solo lo leerá una vez, la primera vez, y omitirá todo el rest.