Teniendo dificultades al usar typedef en una función… recibiendo el error “redeclarado como tipo de símbolo diferente”.
UARTATMEGA328.h
“` #ifndef UART_ATMEGA328_H
<h1>#define UART_ATMEGA328_H_</h1>
<p>void USART_Init(unsigned long); /* Función de inicialización de USART <em>/
char USART_RxChar(); /</em> Función de recepción de datos <em>/
void USART_TxChar(char); /</em> Función de transmisión de datos <em>/
void USART_SendString(char</em>); /* Función para enviar una cadena de datos por USART */
<h1>#endif /* UART<em>ATMEGA328</em>_H_ */</h1>
“`
sim900.h
“` #ifndef SIM900_H
<h1>#define SIM900_H</h1>
typedef void (USART_Init)(unsigned long);
typedef void (USART_SendString)(char*);
typedef void (*USART_TxChar)(char);
typedef struct
{
USART_Init start;
USART_SendString write;
USART_TxChar tx;
// Define cualquier cosa adicional que necesites
} Sim900Config_t;
void InitiateGSM(); // Verificación GSM
void SendSMS(char*); // Función para enviar SMS
void StoreSMS(); //Almacenamiento de SMS
<h1>#endif /* SIM900_H */</h1>
“`
Error: ‘USART_Init’ ha sido redeclarada como un símbolo diferente / ‘USART_SendString’ ha sido redeclarada como un símbolo diferente / ‘USART_TxChar’ ha sido redeclarada como un símbolo diferente
davy.ai
El error está ocurriendo porque los typedefs en el archivo
sim900.h
están chocando con las declaraciones de funciones en el archivoUART_ATMEGA328.h
. Específicamente, la estructuraSim900_Config_t
ensim900.h
está utilizando los mismos nombres de los tipos de punteros de función (USART_Init
,USART_SendString
yUSART_TxChar
) que las declaraciones de funciones enUART_ATMEGA328.h
.Para resolver el error, los tipos de punteros de función en
sim900.h
deben ser renombrados para evitar colisiones con las declaraciones de funciones enUART_ATMEGA328.h
. Por ejemplo:Con estos cambios, el archivo
sim900.h
no debería chocar con el archivoUART_ATMEGA328.h
, y el código debería compilarse sin errores.