2011-07-15 156 views
0

我看到一些C++錯誤,我不明白(我以Java爲中心編碼器):C++編譯問題

WarningNotification_if.cpp: In function 'void fireStatusBarMessage(char*, int)': 
WarningNotification_if.cpp:62:14: error: expected type-specifier 
WarningNotification_if.cpp:62:14: error: cannot convert 'int*' to 'WarningEventData*' in initialization 
WarningNotification_if.cpp:62:14: error: expected ',' or ';' 

下面是實際的代碼:

void fireStatusBarMessage(char *message = 0, int aTime = 0) 
{ 
    LmLocker locker((char *)__FILE__, __LINE__, &WarningEventUpdateMutex); 
    HMI_DEBUG(EVENT_DEBUG, (stderr, "Fire Status Bar Message\n")); 
    if (message != 0) 
    { 
     QString warningMessage = QString(message); 
     WarningEventData *theEventData = 
     new WarningEventData::WarningEventData(); 
     theEventData->initialize(); 
     theEventData->setMessageType(SESSION_STATUSBAR_TYPE); 
     theEventData->setCommand(APPEND_WARNING); 
     theEventData->setMessage(warningMessage); 
     theEventData->setModifier(aTime); 
     theEventData->setCategory(SESSION_STATUSBAR_TYPE); 
     WarningNotification::fireChange(SESSION_STATUSBAR_TYPE, theEventData); 
    } /* endif - message contents */ 
} 

我需要是導入其他內容或使用某個-D標誌?

+1

哪行代碼是62行? – Heatsink

+0

「CPP」(來自您的頭銜)是C預處理器。這是你的意思嗎? –

+0

@我覺得他的意思是「C++」。 –

回答

5
WarningEventData *theEventData = 
    new WarningEventData::WarningEventData(); 

這是很奇怪的。一個new表達式應該命名爲一個類型,而不是構造函數。 WarningEventData是否在一個類似命名的命名空間中?如果是這樣,爲什麼不是WarningEventData::WarningEventData* theEventData

+2

所以可能的答案是刪除'WarningEventData ::'... –

0

看起來你可能需要包括與WarningEventData的申報文件,與

#include "WarningEventData.h" 
2

由於我做了C++,過了一段時間,但我相信構造函數並不期望有明確的調用。試着用

WarningEventData *theEventData = new WarningEventData(); 
5
WarningEventData *theEventData = new WarningEventData::WarningEventData(); 
            // ^^^^^^^^^^^^^ Is WarningEventData is a namespace ? 

更換

WarningEventData *theEventData = new WarningEventData::WarningEventData(); 

如果是這樣,那麼你就必須實例一樣 -

WarningEventData::WarningEventData *theEventData = 
    new WarningEventData::WarningEventData(); 

如果沒有在所有涉及的命名空間 -

WarningEventData *theEventData = new WarningEventData();