本文共 1317 字,大约阅读时间需要 4 分钟。
在项目中遇到如下问题,请看程序。 父类中声明了 SendData 函数 。 UART_HandleTypeDef hUART; uint8_t u8_UartReceiveBuffer[1]; CUart(uint8_t u8_UartNumber, uint32_t u32_BaudRate); void SendData(uint8_t* pData, uint8_t u8_Size); }; 子类对 SendData函数进行了重载。 class CSevenBytesUART:public CMiniUART CSevenBytesUART(uint8_t u8_UartNumber, uint32_t u32_BaudRate); void SendData(uint8_t u8_Command, uint8_t u8_Data1, uint8_t u8_Data2, uint8_t u8_Data3); boolean IsCorrectDataPack(void); }; 在main.c中调用父类的 SendData函数程序报错,报错信息是不认识父类的SendData函数。 Target.HAL.DeviceUart.SelectDevice(0); if (Target.HAL.DeviceUart.IsReceivedData() == TRUE) Target.HAL.DeviceUart.SendData(Target.HAL.DeviceUart.u8_Buffer, (uint8_t)Target.HAL.DeviceUart.u16_Number); } 原因:实际上在子类中声明与父类同名的函数,不应称做重载,而应称做覆盖。 解决方法:在子类中引入父类的同名函数即可,使用的语句是using,程序如下: class CSevenBytesUART:public CMiniUART CSevenBytesUART(uint8_t u8_UartNumber, uint32_t u32_BaudRate); using CMiniUART::SendData; void SendData(uint8_t u8_Command, uint8_t u8_Data1, uint8_t u8_Data2, uint8_t u8_Data3); boolean IsCorrectDataPack(void); }; 这样,就解决了该问题。 CSDN: 。