在项目中遇到如下问题,请看程序。
父类中声明了 SendData 函数 。
父类中声明了 SendData 函数 。
class CUart
{
public:
UART_HandleTypeDef hUART;
uint8_t u8_UartReceiveBuffer[1];
public:
CUart(uint8_t u8_UartNumber, uint32_t u32_BaudRate);
void SendData(uint8_t* pData, uint8_t u8_Size);
};
子类对 SendData函数进行了重载。
在main.c中调用父类的 SendData函数程序报错,报错信息是不认识父类的SendData函数。
原因:实际上在子类中声明与父类同名的函数,不应称做重载,而应称做覆盖。
解决方法:在子类中引入父类的同名函数即可,使用的语句是using,程序如下:
这样,就解决了该问题。
CSDN:http://blog.csdn.net/qingwufeiyang12346 。
子类对 SendData函数进行了重载。
class CSevenBytesUART:public CMiniUART
{
public:
uint8_t u8_Command;
uint8_t u8_Data1;
uint8_t u8_Data2;
uint8_t u8_Data3;
public:
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函数。
while(1)
{
Target.Delayms(1000);
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
{
public:
uint8_t u8_Command;
uint8_t u8_Data1;
uint8_t u8_Data2;
uint8_t u8_Data3;
public:
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:http://blog.csdn.net/qingwufeiyang12346 。