2011-07-15 4 views
0

Je vois une C erreurs de je ne comprends pas (je suis codeur centrique java):C++ problème de compilation

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 ';' 

Voici le code actuel:

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 */ 
} 

Ai-je besoin d'être importer quelque chose d'autre ou utiliser un certain drapeau -D?

+1

Quelle ligne du code est la ligne 62? – Heatsink

+0

"CPP" (de votre titre) est le préprocesseur C. Est-ce ce que vous vouliez dire? –

+0

@Ben Je pense qu'il voulait dire "C++". –

Répondre

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

Ceci est tout à fait étrange. Une expression new est supposée nommer un type, pas un constructeur. Est-ce que WarningEventData se trouve dans un espace de noms de même nom? Et si oui, pourquoi n'est-ce pas WarningEventData::WarningEventData* theEventData?

+2

Donc, probablement la réponse serait de supprimer 'WarningEventData ::' ... –

0

Il semble que vous pourriez avoir besoin d'inclure le fichier avec la déclaration de WarningEventData, comme

#include "WarningEventData.h" 
2

J'ai passé un certain temps depuis que j'ai fait du C++, mais je crois que le constructeur ne s'attend pas à un appel explicite. Essayez de remplacer

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

avec

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

Si oui, alors vous devez instancier comme -

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

S'il n'y a aucun espace de noms impliqué du tout -

WarningEventData *theEventData = new WarningEventData();