2017-10-17 2 views
2

Ich versuche, ein Objekt 'Bug Bug' mit 3 Parametern instanziieren und einer von ihnen ist Enumerator. Hier ist meine Klasse:Wie ein Objekt mit einem Enum-Parameter in C++ instanziieren?

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

};

das ist mein main.cpp:

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

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

    return 0; 
    } 

, wenn ich diese Zeile in der Haupt

hinzugefügt
enum severity { low, medium, severe}; 

die Fehlermeldung an das geändert:

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

Irgendwelche Ideen wie macht man das richtig?

+0

Versuchen 'Bug :: low' oder' Bug :: Schwere :: low'. – apalomer

+0

Verschieben Sie die Enum-Definition in den öffentlichen Abschnitt. main() kann es nicht sehen, weil es privet ist. –

Antwort

0

Fixes wie folgt finden meine Kommentare


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

Verschieben Enum öffentlichen Bereich und versuchen zu nutzen:

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

Ich habe es versucht, ich bekomme die gleiche Fehlermeldung – Art

+0

Sie müssen es aus dem privaten Bereich in die öffentliche –

+0

verschieben Ich habe enum Schweregrad in die Öffentlichkeit verschoben und in Main verwendet: \t Bug bg (3, "a", Bug :: niedrig); Es hat funktioniert, danke! – Art

4

Ihre Enum existiert innerhalb der Bug Klasse, während Ihre Hauptfunktion außerhalb der Klasse ist. So muss es sein.

So ist der richtige Weg, um die Enumeration von Ihrem Haupt Funktion zu verweisen wäre:

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

Allerdings müssen Sie die Enum in dem public Teil der Klasse definieren. Es befindet sich derzeit im Bereich private, wodurch verhindert wird, dass die Hauptfunktion darauf zugreifen kann.

Beachten Sie, dass Sie die Enumeration auch als einen Typ innerhalb der Klasse definieren müssen, die von der privaten Membervariablen, die sie verwendet, getrennt ist. So Ihre Klasse defininition sollte wie folgt sein:

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

Beachten Sie, dass der public Abschnitt muss über den private Abschnitt in dieser Klasse sein, so dass Aufzählungstyp Schweregrad definiert wird, bevor es verwendet wird.

Verwandte Themen