<?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[typedefs in zwei .h Files gegenseitig nutzen]]></title><description><![CDATA[<p>Hi,</p>
<p>hier erst mal ein bissle Code mit 2 verschiedenen .h Dateien und typedefs die in der jeweils anderen genutzt werden:</p>
<pre><code class="language-cpp">/* share.h */
#include &quot;session.h&quot;

class share
{
	/* the size of the share id in bytes */
public:
	static const unsigned SHARE_ID_SIZE = 64;

	typedef std::array&lt;unsigned char, SHARE_ID_SIZE&gt; ShareId;
	typedef unsigned VersionType;

	struct observer
	{
		observer(session::SessionId id = session::INVALID_SESSION_ID, unsigned off = 0) :
			sessionId( id ),
			offset( off )
		{
		}
		session::SessionId sessionId;
		unsigned offset;
	};
}

/* session.h */

#include &quot;share.h&quot;
class session
{
public:
	typedef boost::function&lt;void (unsigned)&gt; EndSessionHandler;
	typedef boost::function&lt;void (session*, share::ShareId)&gt; RegisterShareHandler;
	typedef unsigned int SessionId;
	static SessionId const INVALID_SESSION_ID  = 0 ;

}
</code></pre>
<p>In den Klassen sind auch noch ein paar Funktionen die die verschiedenen typedefs verwenden, aber das Problem konnt ich loesen indem ich die implementierung einfach in ne cpp Datei gepackt hab.</p>
<p>Aber jetzt bekomm ich immer: &quot;share / session ist keine Klasse blabla&quot;. Klaro versteh ich au, aber wie loes ich das am besten.</p>
<p>Ich hab mir gedacht die typedefs einfach in nen eigenen Header schreiben, aber dann sind se ja nicht mehr in der Klasse drin und man wuerd z.B. statt:</p>
<pre><code class="language-cpp">share::ShareId id
</code></pre>
<p>einfach nur</p>
<pre><code class="language-cpp">ShareId id
</code></pre>
<p>schreiben was ich persoenlich ned so schoen find.</p>
<p>Gruessle</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301351/typedefs-in-zwei-h-files-gegenseitig-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 03:37:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301351.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Mar 2012 07:25:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to typedefs in zwei .h Files gegenseitig nutzen on Sun, 25 Mar 2012 07:25:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>hier erst mal ein bissle Code mit 2 verschiedenen .h Dateien und typedefs die in der jeweils anderen genutzt werden:</p>
<pre><code class="language-cpp">/* share.h */
#include &quot;session.h&quot;

class share
{
	/* the size of the share id in bytes */
public:
	static const unsigned SHARE_ID_SIZE = 64;

	typedef std::array&lt;unsigned char, SHARE_ID_SIZE&gt; ShareId;
	typedef unsigned VersionType;

	struct observer
	{
		observer(session::SessionId id = session::INVALID_SESSION_ID, unsigned off = 0) :
			sessionId( id ),
			offset( off )
		{
		}
		session::SessionId sessionId;
		unsigned offset;
	};
}

/* session.h */

#include &quot;share.h&quot;
class session
{
public:
	typedef boost::function&lt;void (unsigned)&gt; EndSessionHandler;
	typedef boost::function&lt;void (session*, share::ShareId)&gt; RegisterShareHandler;
	typedef unsigned int SessionId;
	static SessionId const INVALID_SESSION_ID  = 0 ;

}
</code></pre>
<p>In den Klassen sind auch noch ein paar Funktionen die die verschiedenen typedefs verwenden, aber das Problem konnt ich loesen indem ich die implementierung einfach in ne cpp Datei gepackt hab.</p>
<p>Aber jetzt bekomm ich immer: &quot;share / session ist keine Klasse blabla&quot;. Klaro versteh ich au, aber wie loes ich das am besten.</p>
<p>Ich hab mir gedacht die typedefs einfach in nen eigenen Header schreiben, aber dann sind se ja nicht mehr in der Klasse drin und man wuerd z.B. statt:</p>
<pre><code class="language-cpp">share::ShareId id
</code></pre>
<p>einfach nur</p>
<pre><code class="language-cpp">ShareId id
</code></pre>
<p>schreiben was ich persoenlich ned so schoen find.</p>
<p>Gruessle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195124</guid><dc:creator><![CDATA[C0de4Fun]]></dc:creator><pubDate>Sun, 25 Mar 2012 07:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs in zwei .h Files gegenseitig nutzen on Sun, 25 Mar 2012 07:50:58 GMT]]></title><description><![CDATA[<p>Erst einmal für den Fall, dass du C&amp;P benutzt hast: Da fehlen Semikola an beiden Klassendefinitions-enden.</p>
<p>C0de4Fun schrieb:</p>
<blockquote>
<p>man wuerd z.B. statt:</p>
<pre><code class="language-cpp">share::ShareId id
</code></pre>
<p>einfach nur</p>
<pre><code class="language-cpp">ShareId id
</code></pre>
<p>schreiben was ich persoenlich ned so schoen find.</p>
</blockquote>
<p>Den &quot;selben Effekt&quot; kannst du mit Namespaces erzielen.</p>
<p>Edit: Ah, jetzt seh ich, nun, wenn du Die Typedefs für beide brauchst, dann müssen die Typedefs natürlich vorher gemacht werden. Wie du das anstellst, ist dir überlassen, aber an der zyklischen Abhängigkeit kommst du nicht vorbei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195127</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 25 Mar 2012 07:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to typedefs in zwei .h Files gegenseitig nutzen on Sun, 25 Mar 2012 08:50:06 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Wie du das anstellst, ist dir überlassen, aber an der zyklischen Abhängigkeit kommst du nicht vorbei.</p>
</blockquote>
<p>Krampf. Schau dir den Code mal genauer an, dann siehst du folgendes:<br />
share hängt NICHT von session::SessionId ab, abhängig ist nur session::observer. Deshalb ist die Lösung ganz simpel:</p>
<pre><code class="language-cpp">class share {
  blablabla

  struct observer;
};
</code></pre>
<p>Und dann in der share.cpp session.h einbinden und share::observer definieren. Somit ist die zyklische Abhängigkeit zwischen share.h und session.h aufgebrochen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195134</guid><dc:creator><![CDATA[arghonaut]]></dc:creator><pubDate>Sun, 25 Mar 2012 08:50:06 GMT</pubDate></item></channel></rss>