2017-08-08 53 views
-2

\xx_yy.h:111:25: error: expected '>' before numeric constant錯誤:數字常量的#define BOOT_PROTOCOL之前預期 '>' 0×00

#define BOOT_PROTOCOL 0x00 

\abcd.h:200:25: note: in expansion of macro '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); 

我想現在就解決這個錯誤了一段時間。請幫我解決這個問題。

+2

選擇**一種編程語言**。 C或C++,這是哪一個? –

+0

請在上下文中顯示幾行。 – ChuckCottrill

+0

錯誤來自'g ++',它是一個* C++ *編譯器,所以請不要標記C. –

回答

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> 
+0

謝謝雷米。非常感謝您的幫助。 –

+0

錯誤:模板參數的默認參數封裝了'HIDBoot :: HIDBoot(USB *)' 執行上述修復程序後發生第二個錯誤。超出我的知識。 –

+0

然後從構造函數實現的模板中刪除默認值,並在類模板中使用默認值(如果需要的話):'template class HIDBoot {... public:HIDBoot(USB * p ); ...}; ... template HIDBoot :: HIDBoot(USB * p){...} –

相關問題