<?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[Forward declaration auf enum]]></title><description><![CDATA[<p>Abend,</p>
<p>ich habe ein kleines Problem mit einem inneren enum. Folgende 4 Dateien habe ich:</p>
<pre><code class="language-cpp">//---------- Logger.h ----------
class Logger {
public:
   enum LEVEL { LEVEL_ALL, 
		LEVEL_DEBUG, 
		LEVEL_INFO, 
	     };
   void callAppenders(const LoggingEvent&amp; logEvent) const;

   void log(LEVEL level, const std::string&amp; message);	
};

//---------- Loger.cpp ----------
#include &quot;Logger.h&quot;
#include &lt;cassert&gt;
#include &quot;Appender.h&quot;

/* hier stehen jetzt alle Methodendefinitionen von Logger */

//---------- Appender.h ----------
#include &quot;Logger.h&quot;
class LoggingEvent;

class Appender {
public:
   virtual void doAppend(const LoggingEvent&amp; logEvent) = 0;
};

struct LoggingEvent {
   const Logger::LEVEL	_level;

   LoggingEvent(Logger::LEVEL level, const std::string&amp; message);
};

//--------- Appender.cpp -----------
#include &quot;Appender.h&quot;

/* Definitionen von Appender und LoggingEvent
</code></pre>
<p>Das Problem ist nun: Ich will, dass ich nur in meinen anderen Dateien nur noch Logger.h inkludieren muss (im Moment muss ich immer Logger.h UND Appender.h inkludieren).<br />
Ich will also Appender.h in Logger.h inkludieren. Das geht aber leider nicht, weil es dann an dieser Stelle einen Compilerfehler in Loggingevent gibt:</p>
<pre><code class="language-cpp">const Logger::LEVEL _level;
</code></pre>
<p>Ist ja auch klar, denn die Deklaration von Logger.h kommt ja erst noch. Ich habs mit einer Forward declaration probiert (enum Logger::LEVEL), aber das gibt auch einen Compilerfehler.<br />
Gibt es eine Möglichkeit das elegant zu lösen? (also das Logger.h Appender.h inkludiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245853/forward-declaration-auf-enum</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:01:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245853.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Jul 2009 23:01:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forward declaration auf enum on Sun, 19 Jul 2009 23:01:27 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>ich habe ein kleines Problem mit einem inneren enum. Folgende 4 Dateien habe ich:</p>
<pre><code class="language-cpp">//---------- Logger.h ----------
class Logger {
public:
   enum LEVEL { LEVEL_ALL, 
		LEVEL_DEBUG, 
		LEVEL_INFO, 
	     };
   void callAppenders(const LoggingEvent&amp; logEvent) const;

   void log(LEVEL level, const std::string&amp; message);	
};

//---------- Loger.cpp ----------
#include &quot;Logger.h&quot;
#include &lt;cassert&gt;
#include &quot;Appender.h&quot;

/* hier stehen jetzt alle Methodendefinitionen von Logger */

//---------- Appender.h ----------
#include &quot;Logger.h&quot;
class LoggingEvent;

class Appender {
public:
   virtual void doAppend(const LoggingEvent&amp; logEvent) = 0;
};

struct LoggingEvent {
   const Logger::LEVEL	_level;

   LoggingEvent(Logger::LEVEL level, const std::string&amp; message);
};

//--------- Appender.cpp -----------
#include &quot;Appender.h&quot;

/* Definitionen von Appender und LoggingEvent
</code></pre>
<p>Das Problem ist nun: Ich will, dass ich nur in meinen anderen Dateien nur noch Logger.h inkludieren muss (im Moment muss ich immer Logger.h UND Appender.h inkludieren).<br />
Ich will also Appender.h in Logger.h inkludieren. Das geht aber leider nicht, weil es dann an dieser Stelle einen Compilerfehler in Loggingevent gibt:</p>
<pre><code class="language-cpp">const Logger::LEVEL _level;
</code></pre>
<p>Ist ja auch klar, denn die Deklaration von Logger.h kommt ja erst noch. Ich habs mit einer Forward declaration probiert (enum Logger::LEVEL), aber das gibt auch einen Compilerfehler.<br />
Gibt es eine Möglichkeit das elegant zu lösen? (also das Logger.h Appender.h inkludiert)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746029</guid><dc:creator><![CDATA[bobble]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration auf enum on Sun, 19 Jul 2009 23:06:36 GMT]]></title><description><![CDATA[<p>Enumerationen kann man in C++ leider noch nicht vorwärtsdeklarieren. Mit dem neuen Standard wird das möglich sein. Es gab kürzlich einen Thread zu einem ähnlichen Thema: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-245657.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-245657.html</a></p>
<p>Kannst du <code>&quot;Appender.h&quot;</code> nicht erst nach der Klassendefinition von <code>Logger</code> einbinden? Dann wäre die Enumeration bekannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746031</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:06:36 GMT</pubDate></item><item><title><![CDATA[Reply to Forward declaration auf enum on Sun, 19 Jul 2009 23:08:46 GMT]]></title><description><![CDATA[<p>Forward Definition von <code>enum</code> geht nicht. Oder sagen wir noch nicht, es kommt im nächsten Standard.<br />
Du hast aber eine einfache Möglichkeit, dieses Problem zu lösen. Erstelle einen zusätzlichen Header, welcher <code>Logger.h</code> und <code>Appender.h</code> inkludiert. Wie du den benennen willst, überlasse ich dir. Vielleicht benennst du einen anderen um.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746033</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:08:46 GMT</pubDate></item></channel></rss>