错误:预期'>'在数字常量之前#define BOOT_PROTOCOL 0x00

时间:2017-08-08 23:31:51

标签: c++

  

\ 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);

我正在尝试修复此错误一段时间。请帮我解决这个问题。

1 个答案:

答案 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>