Ich habe eine Klasse, deren Mitglied ein Enum innerhalb dieser Klasse deklariert:Standardwert von Enum in der Klasse erklärt
#include<iostream>
class test
{
public:
enum TYPE{MAN, WOMAN};
TYPE type;
};
int main()
{
test x;
if(x.type == test::MAN) std::cout<<"MAN"<<std::endl;
if(x.type == test::WOMAN) std::cout<<"WOMAN"<<std::endl;
std::cout<<"ok"<<std::endl;
return 0;
}
ich know, dass, wenn eine Enumeration im Namespacebereich deklariert wird, es einen Standardwert hat 0 und Wenn es lokal deklariert wird, hat es keine Standardwerte, was zu undefiniertem Verhalten führt.
Meine Frage ist: Was passiert, wenn ich eine Enum habe, die zu einer Klasse gehört? Ist es auch undefiniertes Verhalten?
testete ich den obigen Code und x.type ist weder MAN noch FRAU. Allerdings habe ich es nur für einen Compiler und ein Betriebssystem getan. Ich bin an einer allgemeineren Antwort interessiert. Ich habe nirgendwo anders Informationen zu diesem Thema gefunden.
Edit1: Kann die Bezugnahme auf diesen unbestimmten Wert einen Segmentierungsfehler verursachen?
Edit2: Ich weiß, das ist keine gut gestaltete Klasse - es ist nicht meins und ich versuche es zu debuggen. Wenn ich also sage, dass ich ein Objekt initialisieren kann, löst das mein Problem nicht. Bitte behandle es als eine theoretische Frage.
Das hat überhaupt nichts mit Enums zu tun. 'Struktur X {int n; }; 'hätte genau das gleiche Problem. –
Sie sollten Ihrem 'type'-Member entweder einen brace-or-equal-Initialisierer geben oder Ihrer' test'-Klasse einen Standardkonstruktor geben, der 'type' initialisiert – KABoissonneault
Es geht nicht um die Enumeration, es geht darum, eine nicht initialisierte Variable zu lesen . UB. – FrankS101