<?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[Problem mit Zugriffen]]></title><description><![CDATA[<p>Ich hänge immer noch an meinem System:</p>
<p>class Game hat eine private Instanz von class Player.<br />
class Player eine private Instanz von Inventory und<br />
class Inventory welche von den Item-Klassen.</p>
<p>Es ist ja bekannt, dass man keine Instanz global anlegen soll. Nur das stellt mich vor eine Wand:</p>
<p>Zunächst erstelle ich in main() ein Objekt von class Game, dann schreibe ich<br />
game.init();</p>
<p>So, jetzt möchten aber auch die Item-Klassen auf class Player zugreifen, um seine Eigenschaften zu verändern.<br />
Das geht jetzt aber nur mit einem Objekt von Game.<br />
Und das habe ich in main() schon erstellt.</p>
<p>Wenn ich jetzt in Funktionen der Item-Klassen ein neues Objekt erstelle, habe ich alles doppelt, Player, Inventory usw...</p>
<p>Das möchte ich ja nicht...</p>
<p>Was kann ich tun?</p>
<p><a href="//P.S">//P.S</a>.:</p>
<p>Ist es eigentlich <strong>soo</strong> schlimm, wenn ich eine einzige Instanz von meiner Hauptklasse Game erstelle?<br />
Was für Gefahren würde es geben?</p>
<p>Weil es könnten dann alle auf Game zugreifen, und die Instanz würde sowieso nur ein einziges mal erstellt werden, hmm...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/139243/problem-mit-zugriffen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 11:33:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139243.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Mar 2006 21:01:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Zugriffen on Sat, 04 Mar 2006 21:05:12 GMT]]></title><description><![CDATA[<p>Ich hänge immer noch an meinem System:</p>
<p>class Game hat eine private Instanz von class Player.<br />
class Player eine private Instanz von Inventory und<br />
class Inventory welche von den Item-Klassen.</p>
<p>Es ist ja bekannt, dass man keine Instanz global anlegen soll. Nur das stellt mich vor eine Wand:</p>
<p>Zunächst erstelle ich in main() ein Objekt von class Game, dann schreibe ich<br />
game.init();</p>
<p>So, jetzt möchten aber auch die Item-Klassen auf class Player zugreifen, um seine Eigenschaften zu verändern.<br />
Das geht jetzt aber nur mit einem Objekt von Game.<br />
Und das habe ich in main() schon erstellt.</p>
<p>Wenn ich jetzt in Funktionen der Item-Klassen ein neues Objekt erstelle, habe ich alles doppelt, Player, Inventory usw...</p>
<p>Das möchte ich ja nicht...</p>
<p>Was kann ich tun?</p>
<p><a href="//P.S">//P.S</a>.:</p>
<p>Ist es eigentlich <strong>soo</strong> schlimm, wenn ich eine einzige Instanz von meiner Hauptklasse Game erstelle?<br />
Was für Gefahren würde es geben?</p>
<p>Weil es könnten dann alle auf Game zugreifen, und die Instanz würde sowieso nur ein einziges mal erstellt werden, hmm...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008738</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sat, 04 Mar 2006 21:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sat, 04 Mar 2006 21:22:28 GMT]]></title><description><![CDATA[<p>etwas daran ändern, dass das nur mit einer object von Game möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008748</guid><dc:creator><![CDATA[some_answer?]]></dc:creator><pubDate>Sat, 04 Mar 2006 21:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sat, 04 Mar 2006 21:31:27 GMT]]></title><description><![CDATA[<p>Es muss doch andere Möglichkeiten geben.<br />
Wo soll ich sonst ein Objekt von Player definieren?<br />
Dann habe ich ja erst noch mehr Instanzen...</p>
<p>Ich möchte einfach überall im Projekt auf ein Objekt von Game zugreifen können, ohne es global zu definieren. Das Objekt soll immer dasselbe sein und bleiben. (Nur 1 Spiel, keine 2 ;))</p>
<p>Oder, wiegesagt, ist es überhaupt so schlimm (in meinem Fall), global zu definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008752</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sat, 04 Mar 2006 21:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sat, 04 Mar 2006 23:01:44 GMT]]></title><description><![CDATA[<p>Innerhalb von Game ist schon der richtige Platz für das Player-Objekt. Wenn du darauf von irgendwo anders zugreifen willst, mußt du es eben (per Referenz) beim Aufruf übergeben, z.B.:</p>
<pre><code class="language-cpp">void Item::use (Player&amp; player)
{
    player.irgend_eine_function();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1008788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008788</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Sat, 04 Mar 2006 23:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sat, 04 Mar 2006 23:55:25 GMT]]></title><description><![CDATA[<p>Und das Item::use() wird in Inventory aufgerufen. Dann braucht auch Inventory das einzige game Objekt aus der main().</p>
<p>Ich mache das jetzt einfach mit einem globalen Objekt von Game.</p>
<p>Also in meinem ganzen Projekt existiert nur ein einziges globales objekt.<br />
Das wird doch kein Problem sein?</p>
<p>Weil damit ist alles viel einfacher, ich kann in der Item::use() einfach<br />
<a href="http://game.xxx" rel="nofollow">game.xxx</a>.... schreiben, und es ist immer das einzigartige game Objekt.</p>
<p>Ich sehe da gar kein Problem</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008808</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sat, 04 Mar 2006 23:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sun, 05 Mar 2006 08:24:48 GMT]]></title><description><![CDATA[<p>Hm, ich schon. Dein Design ist unnötig starr und unflexibel. Deine globale Variable mag jetzt problemlos funktionieren. Aber wenn du erweiterte Funktionalitäten brauchst, kommst du damit in Schwierigkeiten.</p>
<p>Wie gesagt, ich kenne jetzt dein Spieldesign nicht und weiß daher auch nicht, was für Anforderungen noch auf dich zukommen. Aber ich kann ja mal einfach raten:</p>
<p>Was ist, wenn du NPCs (non-player characters) einfügen willst? Die haben ja vielleicht auch ein Inventar. Und wohlmöglich können die auch Items anwenden (auf sich selbst oder auf den Player?). Spätestens ab diesem Moment bist du mit deinem globalen Player am Ende (zumindest, wenn du ihn auf die von dir vorgeschlagene Weise benutzt).</p>
<p>Andererseits, bist du offensichtlich eher noch Anfänger im Bereich OOP. Ich will dich jetzt auch nicht mit zuviel fortgeschrittenem Zeug verwirren. Wenn du umbedingt willst, verwendete halt eine globale Variable. Dein Computer wird deswegen nicht explodieren, soviel kann ich dir garantieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008871</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Sun, 05 Mar 2006 08:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sun, 05 Mar 2006 09:12:14 GMT]]></title><description><![CDATA[<p>mit sowas muss jeder mal auf die nase fallen <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>
<p>gebranntes Kind scheut das Feuer :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008880</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 05 Mar 2006 09:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sun, 05 Mar 2006 12:15:59 GMT]]></title><description><![CDATA[<blockquote>
<p>Was ist, wenn du NPCs (non-player characters) einfügen willst? Die haben ja vielleicht auch ein Inventar. Und wohlmöglich können die auch Items anwenden (auf sich selbst oder auf den Player?). Spätestens ab diesem Moment bist du mit deinem globalen Player am Ende (zumindest, wenn du ihn auf die von dir vorgeschlagene Weise benutzt).</p>
</blockquote>
<p>Hmm, dann leite ich Player und NPC (und Gegner) von einer Basisklasse ab.<br />
Die Klasse &quot;Game&quot; bekommt dann jeweils eine Instanz.<br />
Ich habe ja keinen globalen Player, sondern eine globale Game-Klasse.</p>
<p>Somit können Items zB. auf Player zugreifen:</p>
<p>game.getPlayer().addHealth(100);</p>
<p>Oder das Inventory braucht Daten:</p>
<p>game.getPlayer().getSlots();</p>
<p>oder oder oder...</p>
<p>Kannst du mir genau erläutern, wo ich ein Problem bekommen könnte?</p>
<p>Ja ich bin noch totaler Anfänger.</p>
<p>Wie sollte ich es denn ohne einem globalen Objekt von Game schaffen?<br />
In meiner main() muss ich schon mal eines anlegen, damit ich init(), mainMenu() usw aufrufen kann.<br />
Dann brauche ich noch an vielen anderen Stellen diese Instanz, habe sie aber nicht weil sie nicht global ist.</p>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1008953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008953</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 05 Mar 2006 12:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sun, 05 Mar 2006 13:12:17 GMT]]></title><description><![CDATA[<p>Wenn du deine Item::use Funktion automatisch immer den Player aus dem globalen Game-Objekt verwenden läßt, kannst du sie nicht für NPCs verwenden. Die use-Funktion sollte auf jeden Fall eine Referenz auf den Player übergeben bekommen (oder eventuell auf den NPC, da nimmt man aber dann stattdessen natürlich die Basisklasse). Ist doch auch logisch, oder? Wenn du einem Item sagst, daß es sich anwenden soll, dann mußt du ihm auch noch sagen, worauf es sich anwenden soll.</p>
<blockquote>
<p>In meiner main() muss ich schon mal eines anlegen, damit ich init(), mainMenu() usw aufrufen kann.<br />
Dann brauche ich noch an vielen anderen Stellen diese Instanz, habe sie aber nicht weil sie nicht global ist.</p>
</blockquote>
<p>Da eben liegt dein Problem. Du willst das Game-Objekt von jeder beliebigen Stelle aus verwenden können. Dafür wäre ein globales Objekt (oder viel besser noch ein Singleton) schon die richtige Lösung. Aber diese Forderung sieht für mich wie eine Schwäche im Design aus. Ich würde sie aufgeben. Ich würde sogar die Forderung aufgeben, daß du überhaupt auf das Game-Objekt zugreifen kannst (abgesehen von einer play-Methode vielleicht).</p>
<p>Verlagere alles in das Game-Objekt hinein. Dort hast du dann deine play-Methode, in der die Initialisierunug ausgeführt wird, wo Befehle vom User eingelesen und ausgeführt werden (ich hab dir dazu in einem anderen Thread schon mal ein Beispiel gegeben). Das ist die einzige saubere Lösuung, die mir dazu einfällt.</p>
<blockquote>
<p>Somit können Items zB. auf Player zugreifen:</p>
<p>game.getPlayer().addHealth(100);</p>
</blockquote>
<p>Wenn du den Player beim Funktionsaufruf übergibst, kannst du dir den ganzen Mist mit game.getPlayer() sparen (habe ich auch schon ein Beispiel zu gebracht).</p>
<blockquote>
<p>Oder das Inventory braucht Daten:</p>
<p>game.getPlayer().getSlots();</p>
</blockquote>
<p>Hier dieselbe Lösung. Du ruft die Methode von Inventory aus einer Methode von Game auf. Und da hast du Zugriff auf den Player, kannst ihn also (per Referenz) an die Methode von Inventory übergeben.</p>
<p>Nimm es mir nicht übel, aber ich glaube, du solltest noch mehr über den Umgang mit Klassen lernen, bevor du ernsthaft daran denken kannst OOP zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008991</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Sun, 05 Mar 2006 13:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zugriffen on Sun, 05 Mar 2006 13:18:10 GMT]]></title><description><![CDATA[<blockquote>
<p>du solltest noch mehr über den Umgang mit Klassen lernen</p>
</blockquote>
<p>Ich denke, du hast Recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Danke trotzdem für deine Hilfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1008995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1008995</guid><dc:creator><![CDATA[ceplusplus]]></dc:creator><pubDate>Sun, 05 Mar 2006 13:18:10 GMT</pubDate></item></channel></rss>