<?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[ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse)]]></title><description><![CDATA[<p>Hi,</p>
<p>zuerst werd ich das Problem mal ein wenig beschreiben.</p>
<p>Ich will einen Datenpool erstellen, auf den von jeder Klasse zugegriffen kann.<br />
Ich hab mir das so vorgestellt:<br />
es gibt</p>
<p>- main.cpp für die hauptaufgaben<br />
- datapool.h und datapool.cpp für den datenpool<br />
- klasseA.h und klasseA.cpp: diese sollen einfach Funktionen und klassenvariablen beinhalten<br />
des Weiteren soll nur ein Objekt der Klasse existieren und über den Datenpool auf die Funktionen zugegriffen werden.</p>
<p>z.b. Datapool::getDatapool()-&gt;getklasseA()-&gt;Funktion_von_klasseA();</p>
<p>ich hoff ihr versteht was ich meine:</p>
<p>bisher hab ich die folgenden Klassen programmiert:</p>
<pre><code class="language-cpp">//Datapool.h
#ifndef DATAPOOL_H_
#define DATAPOOL_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Datapool{
	private:
		static Datapool* datapool;

	protected:
		string name;
		Datapool();
	public:
		static Datapool* getInstance();		
		void setName(string tmp);
        string getName();
};
#endif /* DATAPOOL_H_ */
</code></pre>
<pre><code class="language-cpp">#include &quot;Datapool.h&quot;

Datapool* Datapool::datapool = 0;

Datapool::Datapool(){
    name=&quot;&quot;;    
}

Datapool* Datapool::getInstance(){
	if (datapool == 0 ){
		datapool = new Datapool;
	}
	return datapool;
}

void Datapool::setName(string tmp){
	name = tmp;
}

string Datapool::getName(){
	return name;
}
</code></pre>
<p>So ist mein Grundgerüst des Datenpools auf den ich nun von der Main wenn ich #include &quot;Datapool.h&quot; mach mit Datapool::getInstance()-&gt;getName() z.b. zugreifen kann</p>
<p>Wo ich nun hängen bleib ist, wenn ich eine weitere Klasse klasseA erstelle.<br />
In der Klasse selber soll auf den Datapool zugegriffen werden, jedoch soll die Klasse klasseA als Objekt im Datapool erscheinen, so dass ich nun von der main.cpp mit dem Befehl :<br />
Datapool::getInstance()-&gt;getklasseA()-&gt; ... zugreifen kann</p>
<pre><code class="language-cpp">// KlasseA.h
#ifndef KlasseA_H_
#define KlasseA_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

#include &quot;Datapool.h&quot;

using namespace std;

class KlasseA{

	protected:
		string name;
	public:
		KlasseA();
		void setName(string n);
		string getName();
		void changeDatapoolName(string t);
};
#endif /* KlasseA_H_ */
</code></pre>
<pre><code class="language-cpp">#include &quot;KlasseA.h&quot;

KlasseA::KlasseA(){
   name = &quot;KlasseA&quot;;
}

void KlasseA::setName(string n){
	name = n;
}

string KlasseA::getName(){
	return name;
}

void KlasseA::changeDatapoolName(string t){
	  Datapool::getInstance()-&gt;setName(t);
}
</code></pre>
<p>Nun is die Frage wie ich die Klasse KlasseA im Datapool einbinden muss, damit ich z.B. von der main aus den Datapoolwert name mit :<br />
Datapool::getInstance()-&gt;getKlasseA()-&gt;changeDatapoolName(&quot;blub&quot;); ändern kann.<br />
hoff das is einigermassen verständlich was ich meine</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259271/erledigt-problem-bei-datapool-singeltonklasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 22:10:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259271.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Jan 2010 05:24:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 17:21:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>zuerst werd ich das Problem mal ein wenig beschreiben.</p>
<p>Ich will einen Datenpool erstellen, auf den von jeder Klasse zugegriffen kann.<br />
Ich hab mir das so vorgestellt:<br />
es gibt</p>
<p>- main.cpp für die hauptaufgaben<br />
- datapool.h und datapool.cpp für den datenpool<br />
- klasseA.h und klasseA.cpp: diese sollen einfach Funktionen und klassenvariablen beinhalten<br />
des Weiteren soll nur ein Objekt der Klasse existieren und über den Datenpool auf die Funktionen zugegriffen werden.</p>
<p>z.b. Datapool::getDatapool()-&gt;getklasseA()-&gt;Funktion_von_klasseA();</p>
<p>ich hoff ihr versteht was ich meine:</p>
<p>bisher hab ich die folgenden Klassen programmiert:</p>
<pre><code class="language-cpp">//Datapool.h
#ifndef DATAPOOL_H_
#define DATAPOOL_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class Datapool{
	private:
		static Datapool* datapool;

	protected:
		string name;
		Datapool();
	public:
		static Datapool* getInstance();		
		void setName(string tmp);
        string getName();
};
#endif /* DATAPOOL_H_ */
</code></pre>
<pre><code class="language-cpp">#include &quot;Datapool.h&quot;

Datapool* Datapool::datapool = 0;

Datapool::Datapool(){
    name=&quot;&quot;;    
}

Datapool* Datapool::getInstance(){
	if (datapool == 0 ){
		datapool = new Datapool;
	}
	return datapool;
}

void Datapool::setName(string tmp){
	name = tmp;
}

string Datapool::getName(){
	return name;
}
</code></pre>
<p>So ist mein Grundgerüst des Datenpools auf den ich nun von der Main wenn ich #include &quot;Datapool.h&quot; mach mit Datapool::getInstance()-&gt;getName() z.b. zugreifen kann</p>
<p>Wo ich nun hängen bleib ist, wenn ich eine weitere Klasse klasseA erstelle.<br />
In der Klasse selber soll auf den Datapool zugegriffen werden, jedoch soll die Klasse klasseA als Objekt im Datapool erscheinen, so dass ich nun von der main.cpp mit dem Befehl :<br />
Datapool::getInstance()-&gt;getklasseA()-&gt; ... zugreifen kann</p>
<pre><code class="language-cpp">// KlasseA.h
#ifndef KlasseA_H_
#define KlasseA_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;

#include &quot;Datapool.h&quot;

using namespace std;

class KlasseA{

	protected:
		string name;
	public:
		KlasseA();
		void setName(string n);
		string getName();
		void changeDatapoolName(string t);
};
#endif /* KlasseA_H_ */
</code></pre>
<pre><code class="language-cpp">#include &quot;KlasseA.h&quot;

KlasseA::KlasseA(){
   name = &quot;KlasseA&quot;;
}

void KlasseA::setName(string n){
	name = n;
}

string KlasseA::getName(){
	return name;
}

void KlasseA::changeDatapoolName(string t){
	  Datapool::getInstance()-&gt;setName(t);
}
</code></pre>
<p>Nun is die Frage wie ich die Klasse KlasseA im Datapool einbinden muss, damit ich z.B. von der main aus den Datapoolwert name mit :<br />
Datapool::getInstance()-&gt;getKlasseA()-&gt;changeDatapoolName(&quot;blub&quot;); ändern kann.<br />
hoff das is einigermassen verständlich was ich meine</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842395</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 17:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:05:27 GMT]]></title><description><![CDATA[<p>bin leider absoluter c++ noob hab das mal versucht so gut wie möglich zu lösen hoffe das macht was du willst?<br />
falls nicht nimm mir das nicht übel <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="😉"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Datapool{
	private:
		string name;
		class klasseA{
            protected:
                string name;
            public:
                void setName(string n){
                	this-&gt;name = n;
                };
                string getName(){
                	return name;
                };
                void changeDatapoolName(string t){
                	Datapool::getInstance()-&gt;setName(t);
                };
        };
    public:
    	static Datapool *getInstance(){
        	static Datapool *dp = new Datapool();
        	return dp;
        };
        static klasseA *getKlasseA(){
        	static klasseA *a = new klasseA();
        	return a;
        };
        void setName(string n){
        	name = n;
        };
        string getName(){
        	return name;
        };
};

int main() {
	Datapool *a = new Datapool();
	Datapool *b = new Datapool();
	Datapool *c = new Datapool();
	a-&gt;getInstance()-&gt;getKlasseA()-&gt;setName(&quot;aa&quot;);
	cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;
	b-&gt;getInstance()-&gt;getKlasseA()-&gt;setName(&quot;bb&quot;);
	cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;
	c-&gt;getInstance()-&gt;getKlasseA()-&gt;setName(&quot;cc&quot;);
	cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;

	c-&gt;getKlasseA()-&gt;changeDatapoolName(&quot;lolo&quot;);
	cout &lt;&lt; Datapool::getInstance()-&gt;getName() &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>oder evtl. so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Datapool{
	private:
		string name;
    public:
    	class klasseA{
            public:
                static void changeDatapoolName(string t){
                	Datapool::getInstance()-&gt;setName(t);
                };
        };
    	static Datapool *getInstance(){
        	static Datapool *dp = new Datapool();
        	return dp;
        };
        string setName(string n){
        	return (name=n);
        };
        string getName(){
        	return name;
        };
};

int main() {
	Datapool::klasseA::changeDatapoolName(&quot;lolo&quot;);
	cout &lt;&lt; Datapool::getInstance()-&gt;getName() &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>lg lolo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842404</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:11:46 GMT]]></title><description><![CDATA[<p>datapool.h</p>
<pre><code class="language-cpp">class KlasseA;

class Datapool
{
public:
  KlasseA* getKlasseA() const { return klasseA; }
  //...
private:
  KlasseA* klasseA;
};
</code></pre>
<p>datapool.cpp</p>
<pre><code class="language-cpp">#include &quot;klasseA.h&quot;

Datapool::Datapool()
: klasseA(new KlasseA())
{
  //...
}

//...
</code></pre>
<p>so in etwa, wenn ich dich richtig verstanden habe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842405</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:21:19 GMT]]></title><description><![CDATA[<p>danke schonmal für die antwort Lolo</p>
<p>bin nun nur mal theoretisch drüber gehüpft.</p>
<p>Aber so wie ich das versteh legst du ja jedes mal nen neuen Datapool an, dass will ich ja durch das Singelton-Pattern verhindern.</p>
<p>Ich will quasi einen Datapool der nur einmal existiert, auf den von jeder Klasse zugegriffen werden kann und über den man auf die Klasse KlasseA zugreifen kann.</p>
<p>KlasseA soll einfach nachher ne MEthode ausführen können die z.b. zuerst einen wert aus dem Datapool ausliest , mit diesem Wert irgendwas berechnet und danach deb Wert wieder in Datapool schreiben könne.</p>
<p>Des Weiteren soll z.b. KlasseA ne Funktion(z.b. Zeitmessen) besitzen , die wiederum von der main über den Datapool gestartet wird.</p>
<p>Ich weiß hört sich kompliziert an <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842411</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:37:45 GMT]]></title><description><![CDATA[<p>scheint so als müßtest du den contructor private setzen damit du keine neue instanz erstellen kannst die änderungen hab ich mal gepostet <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="😉"
    /></p>
<pre><code class="language-cpp">class Datapool{
    private:
    	...
    	Datapool(){} //erzeugt ein singleton?
    	...
        class klasseA{

int main() {
	Datapool::getInstance()-&gt;getKlasseA()-&gt;setName(&quot;aa&quot;);
    cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;
    Datapool::getInstance()-&gt;getKlasseA()-&gt;setName(&quot;bb&quot;);
    cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;
    Datapool::getInstance()-&gt;getKlasseA()-&gt;setName(&quot;cc&quot;);
    cout &lt;&lt; Datapool::getInstance()-&gt;getKlasseA()-&gt;getName() &lt;&lt; endl;

    Datapool::getKlasseA()-&gt;changeDatapoolName(&quot;lolo&quot;);
    cout &lt;&lt; Datapool::getInstance()-&gt;getName() &lt;&lt; endl;
    cout &lt;&lt; Datapool::getKlasseA()-&gt;getName() &lt;&lt; endl;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1842419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842419</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:47:36 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>datapool.h</p>
<pre><code class="language-cpp">class KlasseA;

class Datapool
{
public:
  KlasseA* getKlasseA() const { return klasseA; }
  //...
private:
  KlasseA* klasseA;
};
</code></pre>
<p>datapool.cpp</p>
<pre><code class="language-cpp">#include &quot;klasseA.h&quot;

Datapool::Datapool()
: klasseA(new KlasseA())
{
  //...
}

//...
</code></pre>
<p>so in etwa, wenn ich dich richtig verstanden habe</p>
</blockquote>
<p>was ich noch erwähnen sollte,</p>
<p>die Klassen sollten getrennt sein. Also jede Klasse in eine cpp und header<br />
Tu mir da bisschen schwer so zusammengeschriebene Klassen auseinander zu bauen.<br />
Die einzelne Klassen werden spöter halt relativ groß, deswegen würd ichs gern auseinandr haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842424</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 07:53:31 GMT]]></title><description><![CDATA[<p>loe schrieb:</p>
<blockquote>
<p>die Klassen sollten getrennt sein.</p>
</blockquote>
<p>in meinem Beispiel sind sie getrennt</p>
<p>dein datapool hält lediglich einen Zeiger auf KlasseA, der im Konstruktor des Datapools initialisiert wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842430</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 21 Jan 2010 07:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 08:01:13 GMT]]></title><description><![CDATA[<p>könnte man nicht auch direct die klasse mit nem #include rein laden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">class Datapool{
    private:
    	Datapool(){}
        string name;
		#include &quot;klasseA.h&quot;
    public:
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1842437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842437</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Thu, 21 Jan 2010 08:01:13 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 08:03:00 GMT]]></title><description><![CDATA[<p>zwutz schrieb:</p>
<blockquote>
<p>loe schrieb:</p>
<blockquote>
<p>die Klassen sollten getrennt sein.</p>
</blockquote>
<p>in meinem Beispiel sind sie getrennt</p>
<p>dein datapool hält lediglich einen Zeiger auf KlasseA, der im Konstruktor des Datapools initialisiert wird</p>
</blockquote>
<p>könntest du mir bitte Zeile 1+6 aus der Datapool.h erklären</p>
<p>und Zeile 1 in der Datapool.cpp müsste heissen Datapool.h und nicht KlasseA.h oder? die KlasseA.h muss in der Datapool.h eingebunden werden oder hab ich da grad nen totalen denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842438</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 08:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 08:04:05 GMT]]></title><description><![CDATA[<p>noobLolo schrieb:</p>
<blockquote>
<p>könnte man nicht auch direct die klasse mit nem #include rein laden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">class Datapool{
    private:
    	Datapool(){}
        string name;
		#include &quot;klasseA.h&quot;
    public:
...
</code></pre>
</blockquote>
<p>nee<br />
#include kannst auch nur über der Klasse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842439</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 08:04:05 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 08:08:07 GMT]]></title><description><![CDATA[<p>loe schrieb:</p>
<blockquote>
<p>nee<br />
#include kannst auch nur über der Klasse</p>
</blockquote>
<p>sicher? das macht doch der preprocessor dem ist das doch gleich wo das steht, der hat doch keinen syntax check <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842442</guid><dc:creator><![CDATA[noobLolo]]></dc:creator><pubDate>Thu, 21 Jan 2010 08:08:07 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 08:15:59 GMT]]></title><description><![CDATA[<p>loe schrieb:</p>
<blockquote>
<p>könntest du mir bitte Zeile 1+6 aus der Datapool.h erklären</p>
</blockquote>
<p>Zeile 1 ist eine Forward Declaration. Sie macht KlasseA in datapool.h bekannt, ohne dass du den Header einbinden musst. Den bindest du erst in datapool.cpp ein, was die Abhängigkeiten der Klassen etwas verringert.<br />
Zeile 6 ist nur eine Methode, mit der man von außen lesend auf das KlasseA-Objekt zugreifen kann. Soll man über die Methode auch schreiben können, musst du das const weglassen</p>
<p>loe schrieb:</p>
<blockquote>
<p>und Zeile 1 in der Datapool.cpp müsste heissen Datapool.h und nicht KlasseA.h oder? die KlasseA.h muss in der Datapool.h eingebunden werden oder hab ich da grad nen totalen denkfehler?</p>
</blockquote>
<p>datapool.h musst du natürlich auch einbinden. Ich habs nur weggelassen, da du es eh schon drinstehen hast.<br />
klasseA.h musst du aber einbinden, da du in der datapool.h ja lediglich eine Forward Declaration hast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1842445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842445</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 21 Jan 2010 08:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 10:47:00 GMT]]></title><description><![CDATA[<p>Das scheint mir alles komplizierter zu sein als es eigentlich sein muss. Warum legst du alle Objekte dynamisch an bzw. arbeitest mit Zeigern wenn Referenzen genausogut funktionieren?<br />
Nächste Frage: Warum hat Klasse A eine Methode, die ein Element von DataPool ändert?</p>
<p>Du brauchst im Header der KlasseA DataPool.h nicht zu inkludieren, da im Header keinerlei Informationen über DataPool bekannt sein müssen, weder Klassenlayout noch Methodensignaturen. Verschieb´ die Zeile in KlasseA.cpp.<br />
Vereinfacht kann das dann so aussehen:</p>
<pre><code class="language-cpp">#ifndef KlasseAH
#define KlasseAH

#include &lt;string&gt;

class KlasseA
{
public:
   void change_datapool_name( const std::string&amp; Name );
};
#endif
</code></pre>
<pre><code class="language-cpp">#include &quot;KlasseA.h&quot;
#include &quot;DataPool.h&quot;

using namespace std;

/* Warum der Umweg über KlasseA? */
void KlasseA::change_datapool_name( const string&amp; Name )
{
   DataPool::instance().set_name( Name );
}
</code></pre>
<pre><code class="language-cpp">#ifndef DataPoolH
#define DataPoolH

#include &quot;string&gt;

#include &quot;KlasseA.h&quot;

class DataPool
{
   std::string Name_;
   KlasseA KlasseA_;

public:
   DataPool&amp; instance();

   KlasseA&amp; KlasseA();

   std::string name() const;
   void set_name( const std::string&amp; Name );

private:
   DataPool();
   DataPool( const DataPool&amp; );
   DataPool&amp; operator=( const DataPool&amp; );
};
#endif
</code></pre>
<pre><code class="language-cpp">#include &quot;DataPool.h&quot;

using namespace std;

DataPool::DataPool()
{
}

DataPool&amp; DataPool::instance()
{
   static DataPool theDataPool;
   return theDataPool;
}

KlasseA&amp; DataPool::KlasseA()
{
   return KlasseA_;
}

string DataPool::name() const
{
   return Name_;
}

void DataPool::set_name( const string&amp; Name )
{
   Name_ = Name;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1842520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842520</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 21 Jan 2010 10:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to ERLEDIGT!!!  Problem bei Datapool (Singeltonklasse) on Thu, 21 Jan 2010 17:20:58 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Hilfen<br />
habs aber nun doch über Pointer gelöst und zwar so:</p>
<pre><code class="language-cpp">/*  * Datapool.h * */
#ifndef DATAPOOL_H_
#define DATAPOOL_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;string.h&gt;

#include &quot;KlasseA.h&quot;

using namespace std;

class Datapool{

	private:
		static Datapool* datapool;
		KlasseA* meinPointer;

	protected:
		string name;
		Datapool();

	public:
		static Datapool* getDatapool();
		void setName(string n);
		string getName();
		KlasseA* getKlasseA();
		void setKlasseA(KlasseA* pointer);
};

#endif /* DATAPOOL_H_ */
</code></pre>
<pre><code class="language-cpp">// Datapool.cpp
#include &quot;Datapool.h&quot;

Datapool* Datapool::datapool = 0;

Datapool::Datapool(){
	name=&quot;&quot;;
	meinPointer= NULL;
}

Datapool* Datapool::getDatapool(){
	if (datapool == 0) {
		datapool = new Datapool;
	}
	return datapool;
}

void Datapool::setName(string n){
	name = n;
}

string Datapool::getName(){
	return name;
}

KlasseA* Datapool::getKlasseA(){
	if (meinPointer == NULL) {
		meinPointer = new KlasseA();
	}
	return meinPointer;
}

void Datapool::setKlasseA(KlasseA* pointer){
	meinPointer = pointer;
}
</code></pre>
<pre><code class="language-cpp">/*  * KlasseA.h *  */

#ifndef KLASSEA_H_
#define KLASSEA_H_

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

class KlasseA{

	public:
		KlasseA();
		void changeDatapoolName(string n);
};

#endif /* KLASSEA_H_ */
</code></pre>
<pre><code class="language-cpp">//KlasseA.cpp
#include &quot;KlasseA.h&quot;
#include &quot;Datapool.h&quot;

KlasseA::KlasseA(){
}

void KlasseA::changeDatapoolName(string n){
	Datapool::getDatapool()-&gt;setName(n);
}
</code></pre>
<pre><code class="language-cpp">//main.cpp
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &quot;Datapool.h&quot;

using namespace std;

int main(int argc, char *argv[]) {
  cout &lt;&lt; &quot;Singelton&quot; &lt;&lt; endl;
  Datapool::getDatapool()-&gt;setName(&quot;test1&quot;);
  cout &lt;&lt; Datapool::getDatapool()-&gt;getName() &lt;&lt; endl;
  Datapool::getDatapool()-&gt;getKlasseA()-&gt;changeDatapoolName(&quot;geaendert über KlasseA&quot;);
  cout &lt;&lt; Datapool::getDatapool()-&gt;getName() &lt;&lt; endl;
  return   0 ;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1842789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1842789</guid><dc:creator><![CDATA[loe]]></dc:creator><pubDate>Thu, 21 Jan 2010 17:20:58 GMT</pubDate></item></channel></rss>