<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[public enum einer Klasse ausserhalb verwenden]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein kleines Problem und komme trotz googeln nicht weiter. Ich habe eine Klasse in dem ein public enum definiert ist. Nachdem ich die Klasse instanziert habe möchte ich nun das enum ausserhalb der Klasse verwenden und das funktioniert nicht. Zur Verdeutlichung ein bisschen Code:</p>
<pre><code class="language-cpp">class CLog
{
public:
	//contructor
	CLog();

	//destructor
	~CLog();

	enum LogLevel
	{
		Off_ = 0,
		Fatal_ = 1,
		Error_ = 2,
		Debug_ = 3,
		Warn_ = 4,
		Info_ = 5
	};

private:
	//setter
	void SetLogLevel(LogLevel logLevel);
};

...
	CLog *log = new CLog();
	log-&gt;SetLogLevel(Warn_);      //die Fehlerquelle
...
</code></pre>
<p>Ich bekomme beim Kompilieren die Fehlermeldung</p>
<blockquote>
<p>error C2065: 'Warn_' : nichtdeklarierter Bezeichner</p>
</blockquote>
<p>Ich möchte ungern das enum ausserhalb der Klasse definieren, daher meine Frage: Was mache ich falsch, bzw. wie lässt sich das Problem aus der Welt schaffen?</p>
<p>Danke Euch!</p>
<p>Sebo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194251/public-enum-einer-klasse-ausserhalb-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 10:24:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194251.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Oct 2007 14:27:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 14:27:34 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe ein kleines Problem und komme trotz googeln nicht weiter. Ich habe eine Klasse in dem ein public enum definiert ist. Nachdem ich die Klasse instanziert habe möchte ich nun das enum ausserhalb der Klasse verwenden und das funktioniert nicht. Zur Verdeutlichung ein bisschen Code:</p>
<pre><code class="language-cpp">class CLog
{
public:
	//contructor
	CLog();

	//destructor
	~CLog();

	enum LogLevel
	{
		Off_ = 0,
		Fatal_ = 1,
		Error_ = 2,
		Debug_ = 3,
		Warn_ = 4,
		Info_ = 5
	};

private:
	//setter
	void SetLogLevel(LogLevel logLevel);
};

...
	CLog *log = new CLog();
	log-&gt;SetLogLevel(Warn_);      //die Fehlerquelle
...
</code></pre>
<p>Ich bekomme beim Kompilieren die Fehlermeldung</p>
<blockquote>
<p>error C2065: 'Warn_' : nichtdeklarierter Bezeichner</p>
</blockquote>
<p>Ich möchte ungern das enum ausserhalb der Klasse definieren, daher meine Frage: Was mache ich falsch, bzw. wie lässt sich das Problem aus der Welt schaffen?</p>
<p>Danke Euch!</p>
<p>Sebo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1377960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377960</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Thu, 04 Oct 2007 14:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 14:35:28 GMT]]></title><description><![CDATA[<p>Die enum-Werte liegen im Namensraum der Klasse, also mußt du sie auch entsprechend zuordnen - <code>log-&gt;SetLogLevel(CLog::Warn_);</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1377968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1377968</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 04 Oct 2007 14:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 15:21:48 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Das hatte ich auch schon probiert, wollte aber ebenfalls nicht, da ich das enum nicht direkt in der Klassendefinition hatte, sondern dort nur die public Deklaration. Ich habe diesen Umstand nun also geändert, nun funzt des. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378004</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Thu, 04 Oct 2007 15:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 17:06:20 GMT]]></title><description><![CDATA[<p>[quote=&quot;SeboStone&quot;]</p>
<pre><code class="language-cpp">enum LogLevel
	{
		Off_ = 0,
		Fatal_ = 1,
		Error_ = 2,
		Debug_ = 3,
		Warn_ = 4,
		Info_ = 5
	};
};
</code></pre>
<p>die unterstriche am ende irritieren mich. haben die irgendeine bedeutung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378054</guid><dc:creator><![CDATA[ul]]></dc:creator><pubDate>Thu, 04 Oct 2007 17:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 19:31:47 GMT]]></title><description><![CDATA[<p>ul schrieb:</p>
<blockquote>
<p>die unterstriche am ende irritieren mich. haben die irgendeine bedeutung?</p>
</blockquote>
<p>Bis auf das der Autor wohl meinte das sie ihm besser gefallen, oder weil irgendeine Konvention vorgegeben ist, wohl kaum.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378156</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 04 Oct 2007 19:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Thu, 04 Oct 2007 22:05:22 GMT]]></title><description><![CDATA[<p>Eine Bedeutung haben sie nicht, aber einen Zweck, denn es existiert eine Klasse namens Error. Mit den Unterstrichen bekomme ich also eine dezente aussehende Eindeutigkeit, statt Syntaxfehlern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378223</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Thu, 04 Oct 2007 22:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 05:43:49 GMT]]></title><description><![CDATA[<p>SeboStone schrieb:</p>
<blockquote>
<p>Eine Bedeutung haben sie nicht, aber einen Zweck, denn es existiert eine Klasse namens Error. Mit den Unterstrichen bekomme ich also eine dezente aussehende Eindeutigkeit, statt Syntaxfehlern.</p>
</blockquote>
<p>Die Eindeutigkeit hast du schon durch den Namensraum der Klasse gegeben. Außerhalb der Klasse in dem der enum deklariert wurde musst du eh Klassenname::Enumwert schreiben.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378261</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 05 Oct 2007 05:43:49 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 05:44:41 GMT]]></title><description><![CDATA[<p>SeboStone schrieb:</p>
<blockquote>
<p>Hi!</p>
<p>Das hatte ich auch schon probiert, wollte aber ebenfalls nicht, da ich das enum nicht direkt in der Klassendefinition hatte, sondern dort nur die public Deklaration. Ich habe diesen Umstand nun also geändert, nun funzt des. Danke!</p>
</blockquote>
<p>Häh, was meinst du damit? Um das enum nutzen zu können, reicht die Definition in der Klassendeklaration völlig aus - natürlich muß dort, wo sie verwendet werden sollen, auch die komplette Klasse bekannt sein (Forward-Deklaration &quot;class CLog;&quot; reicht nicht aus, um den enum nutzen zu dürfen).</p>
<p>PS: Der Compiler kann sehr wohl unterscheiden zwischen der Klasse Error und dem enum-Wert CLog::Error (zumindest solange Error nicht als Subklasse von CLog angelegt ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378262</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 05:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:02:19 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Die Eindeutigkeit hast du schon durch den Namensraum der Klasse gegeben. Außerhalb der Klasse in dem der enum deklariert wurde musst du eh Klassenname::Enumwert schreiben.</p>
</blockquote>
<p>Klar, wenn man ihn auch innerhalb der Klasse immer angeben will. Evolutionär gibts nun auch noch für jeden der enum Einträge eine Funktion, nun müssen die enum Elemente ander heissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378297</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:05:48 GMT]]></title><description><![CDATA[<p>SeboStone schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Die Eindeutigkeit hast du schon durch den Namensraum der Klasse gegeben. Außerhalb der Klasse in dem der enum deklariert wurde musst du eh Klassenname::Enumwert schreiben.</p>
</blockquote>
<p>Klar, wenn man ihn auch innerhalb der Klasse immer angeben will.</p>
</blockquote>
<p>Innerhalb der CLog Klasse bezeichnet ein nacktes 'Error' den Enum-Wert und du mußt die außerhalb existierende Klasse als '::Error' (bzw. 'Namensraum::Error') ansprechen.</p>
<blockquote>
<p>Evolutionär gibts nun auch noch für jeden der enum Einträge eine Funktion, nun müssen die enum Elemente ander heissen.</p>
</blockquote>
<p>Häh? Was heißt das jetzt auf Deutsch? Und welche Beziehung besteht genau zwischen den enum-Elementen und diesen Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378300</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:08:14 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Häh, was meinst du damit? Um das enum nutzen zu können, reicht die Definition in der Klassendeklaration völlig aus - natürlich muß dort, wo sie verwendet werden sollen, auch die komplette Klasse bekannt sein (Forward-Deklaration &quot;class CLog;&quot; reicht nicht aus, um den enum nutzen zu dürfen).</p>
</blockquote>
<p>Ich hatte es zuerst folgendermassen:</p>
<pre><code class="language-cpp">class CLog
{
public:
	//contructor
	CLog();

	//destructor
	~CLog();

	enum LogLevel;

private:
	//setter
	void SetLogLevel(LogLevel logLevel);
};

enum CLog::LogLevel
{
	Off_ = 0,
	Fatal_ = 1,
	Error_ = 2,
	Debug_ = 3,
	Warn_ = 4,
	Info_ = 5
};
</code></pre>
<p>Sebo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378301</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:12:59 GMT]]></title><description><![CDATA[<p>Na so etwas geht natürlich nicht - bevor du einen Namen (egal für was) verwenden kannst, muß er zumindest deklariert werden. Und die einzelnen enum-Werte werden erst bei der Definition (enum CLog::LogLevel{...};) deklariert.</p>
<p>(PS: Die Initialisierungswerte brauchst du in diesem Fall übrigens nicht ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378304</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:16:55 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Häh? Was heißt das jetzt auf Deutsch?</p>
</blockquote>
<p>*lach* Was versteht man daran nicht? Es sind gleichlautende Funktionen hinzugekommen.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und welche Beziehung besteht genau zwischen den enum-Elementen und diesen Funktionen?</p>
</blockquote>
<p>Was tut das zur Sache?! Ansonsten schau' Dir doch mal log4net an, meine Klasse ist dem teilweise nachempfunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378305</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:15:58 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Na so etwas geht natürlich nicht - bevor du einen Namen (egal für was) verwenden kannst, muß er zumindest deklariert werden. Und die einzelnen enum-Werte werden erst bei der Definition (enum CLog::LogLevel{...};) deklariert.</p>
<p>(PS: Die Initialisierungswerte brauchst du in diesem Fall übrigens nicht ;))</p>
</blockquote>
<p>Innerhalb der Klasse hat das sehr wohl funktioniert, nur konnte ich eben von aussen nicht mehr auf die enum-Elemente zugreifen. Das war mein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378306</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:22:21 GMT]]></title><description><![CDATA[<p>SeboStone schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Häh? Was heißt das jetzt auf Deutsch?</p>
</blockquote>
<p>*lach* Was versteht man daran nicht? Es sind gleichlautende Funktionen hinzugekommen.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und welche Beziehung besteht genau zwischen den enum-Elementen und diesen Funktionen?</p>
</blockquote>
<p>Was tut das zur Sache?! Ansonsten schau' Dir doch mal log4net an, meine Klasse ist dem teilweise nachempfunden.</p>
</blockquote>
<p>Das heißt, du hast einen Enum-Wert 'Error_' und eine Funktion (Methode?) Error() - und je nach gesetztem Log-Level wird die passende Funktion aufgerufen, verstehe ich das richtig?</p>
<p>SeboStone schrieb:</p>
<blockquote>
<p>Innerhalb der Klasse hat das sehr wohl funktioniert, nur konnte ich eben von aussen nicht mehr auf die enum-Elemente zugreifen. Das war mein Problem.</p>
</blockquote>
<p>Wo hattest du denn die enum-Definition stehen? Vermutlich nicht im Klassen-Header - und darum außerhalb der Sichtweite für das Hauptprogramm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378310</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:34:17 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Das heißt, du hast einen Enum-Wert 'Error_' und eine Funktion (Methode?) Error() - und je nach gesetztem Log-Level wird die passende Funktion aufgerufen, verstehe ich das richtig?</p>
</blockquote>
<p>Nicht ganz. Es gibt mehrere Funktionen, z.B. void Error(CString message); Ist der Loglevel der entsprechenden Funktion gesetzt wird die Loginformation rausgeschrieben, sonst wird sie ignoriert. Das ganze ist dann über eine Programmeinstellung steuerbar.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wo hattest du denn die enum-Definition stehen? Vermutlich nicht im Klassen-Header - und darum außerhalb der Sichtweite für das Hauptprogramm.</p>
</blockquote>
<p>Nein sonst wäre das ja echter Schwachsinn gewesen. Ich hatte die enum-Definition in der cpp Datei ganz oben stehen.</p>
<p>Sebo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378318</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:34:17 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:38:00 GMT]]></title><description><![CDATA[<p>SeboStone schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wo hattest du denn die enum-Definition stehen? Vermutlich nicht im Klassen-Header - und darum außerhalb der Sichtweite für das Hauptprogramm.</p>
</blockquote>
<p>Nein sonst wäre das ja echter Schwachsinn gewesen. Ich hatte die enum-Definition in der cpp Datei ganz oben stehen.</p>
<p>Sebo</p>
</blockquote>
<p>Genau diese Aufteilung ist &quot;echter Schwachsinn&quot; - der Compiler bearbeitet jede Übersetzungseinheit (CPP-Datei mit allen eingebundenen include's) getrennt, und wenn er einen Namen auf diesem Weg nicht findet, meldet er einen Fehler. Das bedeutet auch, daß in der main.cpp nur die Bezeichner bekannt sind, die du im Header stehen hattest - die enum-Definition in der CPP ist nicht sichtbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378323</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to public enum einer Klasse ausserhalb verwenden on Fri, 05 Oct 2007 07:47:41 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>die enum-Definition in der CPP ist nicht sichtbar.</p>
</blockquote>
<p>Na genau das war mein Problem und das wurde schon einige Beiträge vorher gelöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378330</guid><dc:creator><![CDATA[SeboStone]]></dc:creator><pubDate>Fri, 05 Oct 2007 07:47:41 GMT</pubDate></item></channel></rss>