2010-07-28 64 views
1

這是一條cppcheck警告消息。
變量 'BUFFER_INFO' 皮具有相同名稱的typedef用cppcheck警告,「隱藏typedef同名」

的BUFFER_INFO被定義如下。

typedef struct tagBufferInfo 
{ 
    CRITICAL_SECTION cs; 
    Buffer* pBuffer1; 
    Buffer* pBuffer2; 
    Buffer* pLoggingBuffer; 
    Buffer* pSendingBuffer; 
}BUFFER_INFO, *PBUFFER_INFO; 

而且我寫的,

PBUFFER_INFO p = new BUFFER_INFO; // causes the warning. 

問題是什麼?我如何解決它?
謝謝。

回答

4

看起來這可能是一個cppcheck錯誤。

但是......你寫什麼是壞的C++風格,喜歡:

struct BUFFER_INFO 
{ 
    CRITICAL_SECTION cs; 
    Buffer* pBuffer1; 
    Buffer* pBuffer2; 
    Buffer* pLoggingBuffer; 
    Buffer* pSendingBuffer; 
}; 

我也obsrve,這是不好的C++風格來使用全部大寫的類型名稱(它們通常保留給常量),而那些隱藏事實是指針的類型定義通常不是一個好主意。

1

在C++中,您可以直接使用沒有關鍵字struct的Struct名稱,因此您不需要第一次使用BUFFER_INFO的typedef。 但是對於指針,你仍然可以擁有它。