<?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[Globale Klasseninstanz]]></title><description><![CDATA[<p>Ich habe mehrere Projekte, die alle gemeinsam haben das ich in jedem nur genau eine Instanz einer Klasse benötige.<br />
In der Regel handelt es sich dabei um ein Laborgerät, z.B. einen Positioniertisch, das angesteuert wird.</p>
<p>Meine erste Idee war es diese Klasse in main.cpp (bzw dem Equivalent in MFC) zu initialisieren. Das hat aber das Problem, dass ich in allen Dialogen die main.h laden muss und diese Dialoge in main.h mit ihren dialogx.h geladen werden, so dass ich rekursiv Header Dateien laden. Das hat zu sehr unschönen unlogischen fehlern geführt: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-190495-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-190495-and-highlight-is-.html</a></p>
<p>Wenn ich das innerhalb eines Dialogs initialisier, dann muss ich bei der Übergabe der Klasseninstanz an einen anderen Dialog (und damit eine andere Klasse) ein casting machen. Auch sehr unschön.</p>
<p>Folgende Lösung scheint zu funktionieren, ich wüsste aber gerne eure Meinung dazu</p>
<pre><code>#pragma once
#include &quot;PI_C862Mercury.h&quot;
extern PI_C862Mercury Verschiebetisch;
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;GlobalClasses.h&quot;
PI_C862Mercury Verschiebetisch;
</code></pre>
<p>dann kann ich mit Laden von '#include &quot;GlobalClasses.h&quot;' in jeder Klasse auf die Instanz 'Verschiebetisch' zugreifen.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199841/globale-klasseninstanz</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 22:08:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199841.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Dec 2007 16:47:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 16:48:13 GMT]]></title><description><![CDATA[<p>Ich habe mehrere Projekte, die alle gemeinsam haben das ich in jedem nur genau eine Instanz einer Klasse benötige.<br />
In der Regel handelt es sich dabei um ein Laborgerät, z.B. einen Positioniertisch, das angesteuert wird.</p>
<p>Meine erste Idee war es diese Klasse in main.cpp (bzw dem Equivalent in MFC) zu initialisieren. Das hat aber das Problem, dass ich in allen Dialogen die main.h laden muss und diese Dialoge in main.h mit ihren dialogx.h geladen werden, so dass ich rekursiv Header Dateien laden. Das hat zu sehr unschönen unlogischen fehlern geführt: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-190495-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-190495-and-highlight-is-.html</a></p>
<p>Wenn ich das innerhalb eines Dialogs initialisier, dann muss ich bei der Übergabe der Klasseninstanz an einen anderen Dialog (und damit eine andere Klasse) ein casting machen. Auch sehr unschön.</p>
<p>Folgende Lösung scheint zu funktionieren, ich wüsste aber gerne eure Meinung dazu</p>
<pre><code>#pragma once
#include &quot;PI_C862Mercury.h&quot;
extern PI_C862Mercury Verschiebetisch;
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;GlobalClasses.h&quot;
PI_C862Mercury Verschiebetisch;
</code></pre>
<p>dann kann ich mit Laden von '#include &quot;GlobalClasses.h&quot;' in jeder Klasse auf die Instanz 'Verschiebetisch' zugreifen.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416646</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 07 Dec 2007 16:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 16:50:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Belies dich doch mal zum Thema Singleton. Ich denke das ist genau was du brauchst.<br />
z. Bsp. hier <a href="http://www.oop-trainer.de/Themen/Singleton.html" rel="nofollow">http://www.oop-trainer.de/Themen/Singleton.html</a><br />
Von diesen globalen Variablen halte ich gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416649</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 07 Dec 2007 16:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 17:06:19 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Belies dich doch mal zum Thema Singleton. Ich denke das ist genau was du brauchst.<br />
z. Bsp. hier <a href="http://www.oop-trainer.de/Themen/Singleton.html" rel="nofollow">http://www.oop-trainer.de/Themen/Singleton.html</a><br />
Von diesen globalen Variablen halte ich gar nichts.</p>
</blockquote>
<p>Ich sehe da zwar viel Text und einigen Code aber nicht mal eine Einleitung wozu das ganze da sein soll.</p>
<p>Und was spricht gegen Globale Variablen? Der wesentlich Punkt hierbei ist ja gerade das ich es in praktisch allen Klassen des Projektes benötige und immer mit der gleichen Instanz.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416662</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 07 Dec 2007 17:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 18:58:42 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Der wesentlich Punkt hierbei ist ja gerade das ich es in praktisch allen Klassen des Projektes benötige und immer mit der gleichen Instanz.</p>
</blockquote>
<p>...und genau diesen Anspruch erfüllt das Singleton-Muster <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> . Die Erkärung <a href="http://de.wikibooks.org/wiki/C++-Programmierung:_Entwurfsmuster:_Singleton" rel="nofollow">hier</a> ist vielleicht etwas nachvollziehbarer. Ich bevorzuge übrigens die Heap-Variante, da bei dieser sichergestellt ist, dass die Instanz bei Programmende zerstört wird.</p>
<p>Grüße</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416722</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Fri, 07 Dec 2007 18:58:42 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 19:03:52 GMT]]></title><description><![CDATA[<p>Ich will nicht verhindern dass es mehr als eine Instanz geben kann, ich will nur das diese eine in allen Klassen verfügbar ist.</p>
<p>Wenn ich nun eine Klasse mit einem Singleton Template definiere</p>
<p>test.h</p>
<pre><code>class Test : public Singleton &lt;Test&gt;
{
...
</code></pre>
<p>wie muss ich dann diese Klasse Initialisieren, so dass diese in allen anderen Klassen verfügbar ist?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416726</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 07 Dec 2007 19:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 20:37:07 GMT]]></title><description><![CDATA[<p>garnicht, der erste zugriff erzeugt das object ...<br />
(oder der programmstart)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416760</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Fri, 07 Dec 2007 20:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 22:12:24 GMT]]></title><description><![CDATA[<p>Treb schrieb:</p>
<blockquote>
<p>garnicht, der erste zugriff erzeugt das object ...<br />
(oder der programmstart)</p>
</blockquote>
<p>Eine Klassenstructur liefert mir aber doch kein Objekt zurück. Ich muss also irgendwo ein</p>
<pre><code>Test Testinstanz
</code></pre>
<p>stehen haben.</p>
<p>Wenn das in Klasse A steht, woher kennt dann Klasse B die Instanz?</p>
<p>Vielleicht brauche ich ja auch nur ein vollständiges Beispiel um es zu verstehen.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416805</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 07 Dec 2007 22:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 22:39:05 GMT]]></title><description><![CDATA[<p>von singleton ableiten find ich immer ein wenig doof, besser ist es<br />
(meiner meinung nach)<br />
das singlton-pattern in die class einzuweben</p>
<p>mal ein beispiel für einen logger<br />
(frei aus dem kopf, nur um das prinzip zu zeigen)</p>
<pre><code class="language-cpp">class logger
{

public :

static logger * getInstance
 {
 if(m_instance == 0)
  {
  m_instance = new Logger();
  }
 return m_instance;
 }

private :
 // Konstruktion verbieten
 logger();

 static logger * m_instance;
};
</code></pre>
<p>dtor muss man natürlich noch schreiben usw.</p>
<p>dann in der cpp noch m_instance mit 0 initialisieren und fertig.<br />
Damit darf es im gesamten Project nur eine einzige instance vom logger geben,<br />
auf die man so zugreift :</p>
<pre><code class="language-cpp">logger::getInstance()-&gt;XXXXX;
</code></pre>
<p>keine konstruktion nix ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416819</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Fri, 07 Dec 2007 22:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Fri, 07 Dec 2007 23:23:28 GMT]]></title><description><![CDATA[<p>Ich verstehe das jetzt so, dass man in jeder Klasse in der man logger benötigt die dazugehörige logger.h Datei lädt, und darauf zugreift mit</p>
<pre><code class="language-cpp">logger::getInstance()-&gt;XXXXX;
</code></pre>
<p>anstatt dem üblichen</p>
<pre><code class="language-cpp">loggerinstanz.XXXXX;
</code></pre>
<p>Allerdings muss ich sagen, dass die obere Variante hässlich aussieht, und von Leuten mit meinen Vorkenntnisse nicht verstanden würde, mal abgesehen davon dass ich nicht verstehe wie man überhaupt eine Klasse nutzen kann ohne sie zu initialisieren, weil es jedem widerspricht was ich bislang über Klassen wusste.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416839</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 07 Dec 2007 23:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Sat, 08 Dec 2007 01:11:54 GMT]]></title><description><![CDATA[<p>Eine Klasse musst du nicht initialisieren, kannst du auch gar nicht, du kannst sie nur definieren. Eine Klassen<strong>instanz</strong> muss initialisiert werden. Eine statische Methode, also Klassenmethode bzw. ein statisches Datenelement bezieht sich nicht auf eine bestimmte Instanz, sondern nur die Klasse selbst, dass heißt, du kannst sie überall dort verwenden, wo die Klasse an sich bekannt ist, und musst keine Instanz erzeugen. Das bedeutet aber auch, dass du keinen Zugriff auf eine Methode/Eigenschaft einer bestimmten Instanz hast. Im Grunde genommen sind statische Methoden ähnlich globalen Funktionen, nur dass sie eben nur im Kontext der jeweiligen Klasse existieren. Im Singleton Pattern dient die statische Methode dem Zweck, eine Instanz, und eben nur eine, der jeweiligen Klasse anzulegen, mit der dann gearbeitet wird...</p>
<p>Grüße</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416860</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Sat, 08 Dec 2007 01:11:54 GMT</pubDate></item><item><title><![CDATA[Reply to Globale Klasseninstanz on Sat, 08 Dec 2007 02:11:02 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Folgende Lösung scheint zu funktionieren, ich wüsste aber gerne eure Meinung dazu</p>
<pre><code>#pragma once
#include &quot;PI_C862Mercury.h&quot;
extern PI_C862Mercury Verschiebetisch;
</code></pre>
<pre><code>#include &quot;StdAfx.h&quot;
#include &quot;GlobalClasses.h&quot;
PI_C862Mercury Verschiebetisch;
</code></pre>
<p>dann kann ich mit Laden von '#include &quot;GlobalClasses.h&quot;' in jeder Klasse auf die Instanz 'Verschiebetisch' zugreifen.</p>
</blockquote>
<p>Genau die Lösung hätte ich auch vorgeschlagen (ohne den MS-spezifischen Kram natürlich :p). Singleton ja oder nein muss man abwägen, besonders wenn es nicht kritisch ist, dass nur eine Instanz existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1416864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1416864</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 08 Dec 2007 02:11:02 GMT</pubDate></item></channel></rss>