2017-10-17 8 views
2

J'essaye d'instancier un objet 'Bug bug' avec 3 paramètres et l'un d'entre eux est énumérateur. Voici ma classe:Comment instancier un objet avec un paramètre enum en C++?

class Bug 
{ 
private: 
    int Id; 
    string description; 
    enum severity { low, medium, severe} s; 

public: 
    Bug(void); 
    Bug(int id, string descr, severity x) 
       :Id(id), description(descr), s(x) 
    {} 

    void printDetails() 
    { 
     cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
     <<Id<< endl; 
    } 
    ~Bug(void); 

};

ceci est mon main.cpp:

#include "Bug.h" 
    int main(){ 

    Bug bg(3,"a", low);//Error message: identifier "low" is undefined 

    return 0; 
    } 

quand j'ai ajouté cette ligne à la principale

enum severity { low, medium, severe}; 

le message d'erreur a changé à ceci:

 Bug bg(3,"a", low);//Error message: no instance of constructor "Bug::bug" matches the argument list 

Toutes les idées comment faire ça bien?

+0

'Essayez Bug :: low' ou' Bug :: :: gravité low'. – apalomer

+0

Déplacez la définition enum vers la section publique. main() ne peut pas le voir, parce que c'est privet. –

Répondre

0

Fixe comme suit, voir mes commentaires


class Bug 
{ 


public: 
    // If you intent to use severity outside class , better make it public 
    enum severity { low, medium, severe} ; 

    Bug(void); 
    Bug(int id, string descr, severity x) 
       :Id(id), description(descr), s(x) 
    {} 

    void printDetails() 
    { 
     cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
     <<Id<< endl; 
    } 

    ~Bug() 
    { 
     // Fix your constructor, they don't have void parameter and must have a body 
    } 

    // Moving private section, just to use the severity declaration in public section 
private: 
    int Id; 
    string description; 
    severity s ; // use an instance of severity for internal use 
}; 

int main() 
{ 
    Bug bg(3,"a", Bug::low); // now use severity values using Bug:: 


} 
0

Déplacer ENUM à la zone publique et essayez d'utiliser:

Bug bg(3,"a", Bug::severity::low); 
+0

Je l'ai essayé, je reçois le même message d'erreur – Art

+0

vous devez le déplacer de la section privé au public –

+0

je me suis déplacé la gravité de ENUM au public et utilisé ce dans le principal: \t bg Bug (3, « a », Bug :: faible); Ça a marché, merci! – Art

4

Votre ENUM existe à l'intérieur de la classe Bug, alors que votre fonction principale est en dehors de la classe. C'est comme ça que ça doit être.

Ainsi, la bonne façon de faire référence à la ENUM de votre fonction principale serait:

Bug bg(3,"a", Bug::low);

Cependant, vous devez définir l'ENUM dans la section public de la classe. Il est actuellement dans la section private, ce qui empêchera la fonction principale d'y accéder.

Notez que vous devrez également définir l'énumération en tant que type dans la classe distincte de la variable membre privée qui l'utilise. Ainsi, votre defininition de classe devrait devenir quelque chose comme ceci:

class Bug 
{ 
public: 
    typedef enum {low, medium, severe} severity; 
    Bug(void); 
    Bug(int id, string descr, severity x) 
       :Id(id), description(descr), s(x) 
    {} 

    void printDetails() 
    { 
     cout<< "Severity level:" <<s<< " Description: " <<description<<" ID= " 
     <<Id<< endl; 
    } 
    ~Bug(void); 

private: 
    int Id; 
    string description; 
    severity s; 
}; 

Notez que la section public doit être au-dessus de la section private dans cette classe, de sorte que la gravité de type ENUM est définie avant utilisé.