\ xx_yy.h:111:25:错误:预期'>'在数字常量之前
#define BOOT_PROTOCOL 0x00
\ abcd.h:200:25:注意:在扩展宏' BOOT_PROTOCOL'
template <const uint8_t BOOT_PROTOCOL>
我的代码:
template <const uint8_t BOOT_PROTOCOL>
HIDBoot<BOOT_PROTOCOL>::HIDBoot(USB *p) :
HID(p),
qNextPollTime(0),
bPollEnable(false) {
Initialize();
for(int i = 0; i < epMUL(BOOT_PROTOCOL); i++) {
pRptParser[i] = NULL;
}
if(pUsb)
pUsb->RegisterDeviceClass(this);
我正在尝试修复此错误一段时间。请帮我解决这个问题。
答案 0 :(得分:1)
BOOT_PROTOCOL
是预处理器#define
宏的名称。在编译器之后,预处理器会将BOOT_PROTOCOL
的所有引用更改为0x00
,然后才会看到更改后的代码。
所以,这段代码:
template <const uint8_t BOOT_PROTOCOL>
将更改为:
template <const uint8_t 0x00>
哪个不是有效的C ++语法。
您需要为模板参数使用不同的名称,例如:
template <const uint8_t BootProtocol>
HIDBoot<BootProtocol>::HIDBoot(USB *p) :
HID(p),
qNextPollTime(0),
bPollEnable(false)
{
Initialize();
for(int i = 0; i < epMUL(BootProtocol); i++) {
pRptParser[i] = NULL;
}
if(pUsb)
pUsb->RegisterDeviceClass(this);
如果您希望参数的默认值为0,则可以使用您的宏,例如:
template <const uint8_t BootProtocol = BOOT_PROTOCOL>
预处理器将更改为:
template <const uint8_t BootProtocol = 0x00>