<?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[In klasse auf std::liste zugreifen]]></title><description><![CDATA[<p>ich habe folgendes problem ich möchte die in der Klasse erstellten liste zugreifen mit einer methode der klasse zugreifen:</p>
<pre><code class="language-cpp">#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;iomanip&gt;
#include &lt;vector&gt;

#include &quot;item.h&quot;
using namespace std;

class Item;
class Player
{
protected:
	std::list&lt;Item*&gt; inventory;
public:

	Player(const string&amp; vName, const int&amp; vMaxiWeight);
	virtual ~Player(void);

	string	getName()			const;
	int		getCurrentWeight()	const;
	int		getMaximumWeight()	const;

	void	setName();
	void	setCurrentWeight(int&amp; plCurrentWeight);
	void	setMaximumWeight(int&amp; plMaximumWeight);

	void	showInventory() const;
	void	addItem(Item&amp; items);

	string makeCompareable(const string&amp; str) const;
	bool  operator&lt;(const Player&amp; value) const; 
            bool  operator&lt;(const Player&amp; value) const; 

	 ostream&amp; write(std::ostream&amp; os, std::vector&lt;Player&gt;&amp; allPlayers)
	 {
		 std::vector&lt;Player&gt;::const_iterator iter; 

	 for(iter=allPlayers.begin(); iter!=allPlayers.end(); ++iter) 
	 { 
		 cout&lt;&lt;&quot;test1&quot;;
		 os	&lt;&lt;iter-&gt;getName()&lt;&lt;&quot;\n&quot;
			 &lt;&lt;iter-&gt;getMaximumWeight()&lt;&lt;&quot;\n&quot;
			 &lt;&lt;iter-&gt;getCurrentWeight()&lt;&lt;&quot;\n&quot;;
	 }

	 std::list&lt;Item*&gt;::const_iterator iterInventory;
	 //inventory existiert nicht?
	 for(iterInventory=inventory.begin(); iterInventory!=inventory.end(); ++iter) 
	 {
		 cout&lt;&lt;&quot;test2&quot;;
		 os&lt;&lt;(*iterInventory)-&gt;write(os)&lt;&lt;&quot;\n&quot;; //wieso schreibt der hier nicht rein?
	 }

	 return os;
	 }//end write()

private:
	string name;
	int currentWeight;
	int maximumWeight;

};

//hier kann ich zugreifen 
inline ostream&amp; operator&lt;&lt;( ostream&amp; out,  Player const &amp;p ) 
{ 
	out &lt;&lt;&quot;\n**********************************************&quot;
	    &lt;&lt;&quot; \nName:\t\t\t&quot;&lt;&lt;p.getName()
		&lt;&lt;&quot; \nMaximales Gewicht:\t&quot;&lt;&lt;p.getMaximumWeight()
		&lt;&lt;&quot; \naktuelles Gewicht:\t&quot;&lt;&lt;p.getCurrentWeight()&lt;&lt;endl;	
	p.showInventory();
	out&lt;&lt;&quot;**********************************************&quot;&lt;&lt;endl;
	return out; 
}
</code></pre>
<p>folgende main</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;Item.h&quot;
#include &quot;Player.h&quot;
#include &quot;Food.h&quot;
#include &quot;Weapon.h&quot;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;stdexcept&gt;
#include &lt;conio.h&gt;// für _getch()

using namespace std;

void menu();

int _tmain(int argc, _TCHAR* argv[])
{
	std::vector&lt;Player&gt; allPlayers;
	std::ostream_iterator&lt;Player&gt;output(cout, &quot; &quot;);
	Player *pPlayer=NULL;

	//*********************************
			string plname;
			int plweight;
			cout&lt;&lt;&quot;\nNeuer Spielername eingeben: &quot;;
			cin&gt;&gt;plname;
			cout&lt;&lt;&quot;Maximum-Gewicht eingeben:&quot;;
			cin&gt;&gt;plweight;;
			pPlayer= new Player(plname,plweight);
			allPlayers.push_back(*pPlayer);
			std::sort(allPlayers.begin(),allPlayers.end());

			string foodname;int feedingValue; int foodweight;
						cout&lt;&lt;&quot;\nWelches Nahrungmittel wollen sie aufnehmen?:&quot;;
						cin&gt;&gt;foodname;
						cout&lt;&lt;&quot;\nGeben Sie den Nährwert an:&quot;;
						cin&gt;&gt;feedingValue;
						cout&lt;&lt;&quot;\nGeben Sie nun das Gewicht ein:&quot;;
						cin&gt;&gt;foodweight;

						Item *pItem= new Food(foodname,feedingValue,foodweight);
						std::copy(allPlayers.begin(), allPlayers.end(),output);
						cout&lt;&lt;&quot; Zu welchem Spieler soll der Gegenstand hinzugefuegt werden?:&quot;;
						string pname;
						cin&gt;&gt;pname;
						bool exist=false;
						for (std::vector&lt; Player &gt;::iterator location=allPlayers.begin(); location!=allPlayers.end(); location++)
						{
							if (location-&gt;getName()==pname)
							{
								location-&gt;addItem(*pItem);
								exist=true;
							}
						}

				cout&lt;&lt;&quot; Alle Spieler anzeigen:&quot;;
				std::copy(allPlayers.begin(), allPlayers.end(),output);

				ofstream outfile(&quot;test.txt&quot;, ios::out);
				pPlayer-&gt;write(outfile, allPlayers);
delete []pPlayer;
delete []pItem;
</code></pre>
<p>ausgabe der txt-datei ist nur der eintrag von Objekt zu sehen<br />
aber nicht der inhalt der liste: inventory. warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185163/in-klasse-auf-std-liste-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 03:06:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185163.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jun 2007 12:10:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 09:51:20 GMT]]></title><description><![CDATA[<p>ich habe folgendes problem ich möchte die in der Klasse erstellten liste zugreifen mit einer methode der klasse zugreifen:</p>
<pre><code class="language-cpp">#pragma once
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;iomanip&gt;
#include &lt;vector&gt;

#include &quot;item.h&quot;
using namespace std;

class Item;
class Player
{
protected:
	std::list&lt;Item*&gt; inventory;
public:

	Player(const string&amp; vName, const int&amp; vMaxiWeight);
	virtual ~Player(void);

	string	getName()			const;
	int		getCurrentWeight()	const;
	int		getMaximumWeight()	const;

	void	setName();
	void	setCurrentWeight(int&amp; plCurrentWeight);
	void	setMaximumWeight(int&amp; plMaximumWeight);

	void	showInventory() const;
	void	addItem(Item&amp; items);

	string makeCompareable(const string&amp; str) const;
	bool  operator&lt;(const Player&amp; value) const; 
            bool  operator&lt;(const Player&amp; value) const; 

	 ostream&amp; write(std::ostream&amp; os, std::vector&lt;Player&gt;&amp; allPlayers)
	 {
		 std::vector&lt;Player&gt;::const_iterator iter; 

	 for(iter=allPlayers.begin(); iter!=allPlayers.end(); ++iter) 
	 { 
		 cout&lt;&lt;&quot;test1&quot;;
		 os	&lt;&lt;iter-&gt;getName()&lt;&lt;&quot;\n&quot;
			 &lt;&lt;iter-&gt;getMaximumWeight()&lt;&lt;&quot;\n&quot;
			 &lt;&lt;iter-&gt;getCurrentWeight()&lt;&lt;&quot;\n&quot;;
	 }

	 std::list&lt;Item*&gt;::const_iterator iterInventory;
	 //inventory existiert nicht?
	 for(iterInventory=inventory.begin(); iterInventory!=inventory.end(); ++iter) 
	 {
		 cout&lt;&lt;&quot;test2&quot;;
		 os&lt;&lt;(*iterInventory)-&gt;write(os)&lt;&lt;&quot;\n&quot;; //wieso schreibt der hier nicht rein?
	 }

	 return os;
	 }//end write()

private:
	string name;
	int currentWeight;
	int maximumWeight;

};

//hier kann ich zugreifen 
inline ostream&amp; operator&lt;&lt;( ostream&amp; out,  Player const &amp;p ) 
{ 
	out &lt;&lt;&quot;\n**********************************************&quot;
	    &lt;&lt;&quot; \nName:\t\t\t&quot;&lt;&lt;p.getName()
		&lt;&lt;&quot; \nMaximales Gewicht:\t&quot;&lt;&lt;p.getMaximumWeight()
		&lt;&lt;&quot; \naktuelles Gewicht:\t&quot;&lt;&lt;p.getCurrentWeight()&lt;&lt;endl;	
	p.showInventory();
	out&lt;&lt;&quot;**********************************************&quot;&lt;&lt;endl;
	return out; 
}
</code></pre>
<p>folgende main</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;Item.h&quot;
#include &quot;Player.h&quot;
#include &quot;Food.h&quot;
#include &quot;Weapon.h&quot;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;stdexcept&gt;
#include &lt;conio.h&gt;// für _getch()

using namespace std;

void menu();

int _tmain(int argc, _TCHAR* argv[])
{
	std::vector&lt;Player&gt; allPlayers;
	std::ostream_iterator&lt;Player&gt;output(cout, &quot; &quot;);
	Player *pPlayer=NULL;

	//*********************************
			string plname;
			int plweight;
			cout&lt;&lt;&quot;\nNeuer Spielername eingeben: &quot;;
			cin&gt;&gt;plname;
			cout&lt;&lt;&quot;Maximum-Gewicht eingeben:&quot;;
			cin&gt;&gt;plweight;;
			pPlayer= new Player(plname,plweight);
			allPlayers.push_back(*pPlayer);
			std::sort(allPlayers.begin(),allPlayers.end());

			string foodname;int feedingValue; int foodweight;
						cout&lt;&lt;&quot;\nWelches Nahrungmittel wollen sie aufnehmen?:&quot;;
						cin&gt;&gt;foodname;
						cout&lt;&lt;&quot;\nGeben Sie den Nährwert an:&quot;;
						cin&gt;&gt;feedingValue;
						cout&lt;&lt;&quot;\nGeben Sie nun das Gewicht ein:&quot;;
						cin&gt;&gt;foodweight;

						Item *pItem= new Food(foodname,feedingValue,foodweight);
						std::copy(allPlayers.begin(), allPlayers.end(),output);
						cout&lt;&lt;&quot; Zu welchem Spieler soll der Gegenstand hinzugefuegt werden?:&quot;;
						string pname;
						cin&gt;&gt;pname;
						bool exist=false;
						for (std::vector&lt; Player &gt;::iterator location=allPlayers.begin(); location!=allPlayers.end(); location++)
						{
							if (location-&gt;getName()==pname)
							{
								location-&gt;addItem(*pItem);
								exist=true;
							}
						}

				cout&lt;&lt;&quot; Alle Spieler anzeigen:&quot;;
				std::copy(allPlayers.begin(), allPlayers.end(),output);

				ofstream outfile(&quot;test.txt&quot;, ios::out);
				pPlayer-&gt;write(outfile, allPlayers);
delete []pPlayer;
delete []pItem;
</code></pre>
<p>ausgabe der txt-datei ist nur der eintrag von Objekt zu sehen<br />
aber nicht der inhalt der liste: inventory. warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311415</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 09:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 09:14:24 GMT]]></title><description><![CDATA[<p>glaube sollte noch nee erklärung anfügen da das wohl zu abstract und ungenau beschrieben war. man vergebe mir.<br />
zur erklärung: ich habe 4 klassen eine Player-klasse und eine Item-klasse, dann von Itemklasse zwei abgeleitete klassen Food und Weapon. ich habe um die eingebenen daten abzuspeichern (in Txtdatei)in der Player klasse ein write-funktion geschrieben und eine in Itemklasse die virtual.. ist (d.h. Item ist abstract) die write funktion in item ist also</p>
<pre><code class="language-cpp">virtual ostream &amp;write(ostream&amp;)=0;
</code></pre>
<p>in der klasse Food ist dann write definiert mit</p>
<pre><code class="language-cpp">virtual ostream &amp;write(ostream&amp;os)
	{
		os&lt;&lt;getFoodName()&lt;&lt;&quot;\n&quot;
			&lt;&lt;getFeedingValue()&lt;&lt;&quot;\n&quot;
			&lt;&lt;getFoodweight()&lt;&lt;&quot;\n&quot;;
		return os;

	}
</code></pre>
<p>leider bekomme ich nur in die Txtdatei geschrieben die Player-daten aber keine Inventory-daten von Food-klasse oder Weaponklasse. weiterhin weiss ich auch das in der inventory nichts drin steht , jetzt die frage wie bekomme ich da was rein bzw abgespeichert in txt. dachte das wurde in main gemacht mit</p>
<pre><code class="language-cpp">pPlayer-&gt;write(outfile, allPlayers);.
</code></pre>
<p>hoffe das ihr mir helfen könnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311968</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 09:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 09:23:04 GMT]]></title><description><![CDATA[<p>Erstmal versucht du, das Inventar von &quot;this&quot; zu schreiben, und nicht das eines der vector-Elemente.</p>
<p>Zweitens solltest du mal dein Design überdenken. Player::write() in der Form, wie du sie hier eingesetzt hast, ist unsinnig. Entweder du änderst sie so, daß sie nur die Daten von this ausgibt oder du machst eine statische Methode (oder gar eine globale Funktion) draus.</p>
<p>Und drittens ist <code>os&lt;&lt;(*iterInventory)-&gt;write(os)</code> sinnlos - write() schreibt schon selbst und gibt den fertig geschriebenen Stream zurück, den mußt du nicht nochmal auf sich selbst ausgeben.</p>
<p>PS: Und viertens hast du ein gewaltiges Speicherleck in deinem Hauptprogramm - du legst kiloweise Player-Objekte per new an und lässt sie dann auf dem Heap verrotten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311976</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 23 Jun 2007 09:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 09:57:30 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstmal versucht du, das Inventar von &quot;this&quot; zu schreiben, und nicht das eines der vector-Elemente.</p>
<p>Zweitens solltest du mal dein Design überdenken. Player::write() in der Form, wie du sie hier eingesetzt hast, ist unsinnig. Entweder du änderst sie so, daß sie nur die Daten von this ausgibt oder du machst eine statische Methode (oder gar eine globale Funktion) draus.</p>
<p>Und drittens ist <code>os&lt;&lt;(*iterInventory)-&gt;write(os)</code> sinnlos - write() schreibt schon selbst und gibt den fertig geschriebenen Stream zurück, den mußt du nicht nochmal auf sich selbst ausgeben.</p>
<p>PS: Und viertens hast du ein gewaltiges Speicherleck in deinem Hauptprogramm - du legst kiloweise Player-Objekte per new an und lässt sie dann auf dem Heap verrotten.</p>
</blockquote>
<p>ok ich hab die mit delete gelöscht hab nur net das ganze main geschrieben..<br />
das os&lt;&lt;(*iterInventory)-&gt;write(os) ruft die virtual funktion von Item auf die dann in der unterklasse definiert ist mit :</p>
<pre><code class="language-cpp">virtual ostream &amp;write(ostream&amp;os) 
    { 
        os&lt;&lt;getFoodName()&lt;&lt;&quot;\n&quot; 
            &lt;&lt;getFeedingValue()&lt;&lt;&quot;\n&quot; 
            &lt;&lt;getFoodweight()&lt;&lt;&quot;\n&quot;; 
        return os; 

    }
</code></pre>
<p>aber das problem liegt das in inventory nichts drin steht <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="😕"
    /> bin immoment bissl confused <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1311998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311998</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 09:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 11:22:09 GMT]]></title><description><![CDATA[<p>Erstens: Hast du die beiden delete[]-Zeilen jetzt ergänzt? Wenn ja, die sind (a) falsch (an der Stelle ist das [] zu viel) und (b) zu spät, weil sie nur die zuletzt angelegten Objekte wieder löschen. (und (c) ist es in C++ nicht erforderlich, alle Objekte auf dem Heap anzulegen - wenn du den Stack nutzt, sparst du dir eine Menge Ärger mit der Speicherverwaltung).</p>
<p>Zweitens: Deine virtuelle Funktion kümmert sich doch schon selber um die Ausgaben. Der Rückgabewert ist der beschriebene Ausgabestrom - und den auf sich selbst zu schreiben macht wenig Sinn.</p>
<p>Und drittens: An der Aktion sind zwei(+x) Player-Objekte beteiligt - das Objekt hinter pPlayer und das/die Elemente in deinem Vector. In den Vector-Elementen hast du das Inventar umsortiert, aber in der write()-Methode gibst du das Inventar von pPlayer aus (und der wurde beim push_back() kopiert und hat von den Aktionen im vector nichts mitbekommen).<br />
(wie ich schon sagte, du solltest den Sinn der Player::write()-Methode nochmal hinterfragen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312058</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 23 Jun 2007 11:22:09 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 12:43:59 GMT]]></title><description><![CDATA[<p>ok dann lösen wir zusammen eins nach dem anderen, das problem zuerst, ich würde gerne die datei abspeichern können und zwar mit inventar.<br />
ich bekomme folgendes gemacht und in der main geschrieben. write() wurde gelöscht</p>
<pre><code class="language-cpp">if(!allPlayers.empty())
					{
						string dateiname;
						cout&lt;&lt;&quot;\nBitte Dateiname eingeben *.txt: &quot;;
						cin&gt;&gt;dateiname;
						ofstream outfile(dateiname.c_str(), ios::out);
						if(!outfile)
						{
							cerr&lt;&lt;&quot;File could not be opened&quot;&lt;&lt;endl;
							exit(1);
						}
						std::vector&lt;Player&gt;::const_iterator iter; 
						for(iter=allPlayers.begin(); iter!=allPlayers.end(); ++iter) 
						{ 
							outfile&lt;&lt;iter-&gt;getName()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getMaximumWeight()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getCurrentWeight()&lt;&lt;&quot;\n&quot;;

                   //outfile&lt;&lt; inventory....... nur wie?????		
		                            }//endfor

						//pPlayer-&gt;write(outfile, allPlayers);						
						outfile.close();

					}else {cout&lt;&lt;&quot; zuerst Datensatz einlesen!\n&quot;;}
</code></pre>
<p>so damit habe ich die Player attribute in der Txtdatei nun fehlt nur<br />
das was in der Liste drin steht bei inventory. das heisst ich muss irgendwie auf die attribute der abgeleiteten klassen zugreifen können bzw eben auf das was in inventory abgespeichert ist. <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/1312114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312114</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 12:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 12:50:45 GMT]]></title><description><![CDATA[<p>Schreib die Methode write() doch so um, daß sie EINEN Player (*this) ausgeben kann und ruf ihn dann in der Schleife auf (oder du wendest einfach den operator&lt;&lt;() aus deinem ersten Beitrag auf alle Player des vector's an).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312121</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 23 Jun 2007 12:50:45 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 13:18:38 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Schreib die Methode write() doch so um, daß sie EINEN Player (*this) ausgeben kann und ruf ihn dann in der Schleife auf (oder du wendest einfach den operator&lt;&lt;() aus deinem ersten Beitrag auf alle Player des vector's an).</p>
</blockquote>
<p>ich hab jetzt in player nee funktion geschrieben</p>
<pre><code class="language-cpp">ostream&amp; Player::getInventory(ostream&amp; os)const
{
  cout&lt;&lt;&quot;Inventar:&quot;&lt;&lt;endl;
  std::list&lt;Item*&gt;::const_iterator iter;
  for(iter=inventory.begin(); iter!=inventory.end(); ++iter) 
  { 
	 return (*iter)-&gt;write(os);
  } 
	//return (*iter)-&gt;write(os); //hmm muss net sein
}
</code></pre>
<p>und rufe jetzt mit :</p>
<pre><code class="language-cpp">ofstream outfile(dateiname.c_str(), ios::out);
						if(!outfile)
						{
							cerr&lt;&lt;&quot;File could not be opened&quot;&lt;&lt;endl;
							exit(1);
						}
						std::vector&lt;Player&gt;::const_iterator iter; 
						for(iter=allPlayers.begin(); iter!=allPlayers.end(); ++iter) 
						{ 
							outfile&lt;&lt;iter-&gt;getName()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getMaximumWeight()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getCurrentWeight()&lt;&lt;&quot;\n&quot;;
							outfile&lt;&lt;iter-&gt;getInventory(outfile);
						}

						outfile.close();
</code></pre>
<p>so jetzt schreibt der auch das inventar <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="🙂"
    /><br />
allerdings bringt der noch nee merkwürdige adresse hinterher das muss ich noch wegbekommen.<br />
Wie meinst du das mit dem</p>
<blockquote>
<p>(oder du wendest einfach den operator&lt;&lt;() aus deinem ersten Beitrag auf alle Player des vector's an).</p>
</blockquote>
<p>??<br />
wie soll das aussehen? weil das hab ich mir auch schon überlegt hmmm?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312142</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 13:18:38 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 13:27:53 GMT]]></title><description><![CDATA[<p>Erstmal verlässt du diese Methode (und damit auch die Schleife) schon im ersten Durchlauf - lass mal das 'return' in der Schleife weg:</p>
<pre><code class="language-cpp">ostream&amp; Player::getInventory(ostream&amp; os)const
{
  cout&lt;&lt;&quot;Inventar:&quot;&lt;&lt;endl;
  std::list&lt;Item*&gt;::const_iterator iter;
  for(iter=inventory.begin(); iter!=inventory.end(); ++iter) 
  { 
     (*iter)-&gt;write(os);
     os&lt;&lt;endl;
  }
  return os;
}
</code></pre>
<p>(über den Namen der Methode könnte man ja streiten ;))</p>
<p>Und zweitens hast du schon den Punkt entdeckt, den ich oben angesprochen habe:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Zweitens: Deine virtuelle Funktion kümmert sich doch schon selber um die Ausgaben. Der Rückgabewert ist der beschriebene Ausgabestrom - und den auf sich selbst zu schreiben macht wenig Sinn.</p>
</blockquote>
<p>Die Anweisung <code>outfile&lt;&lt; iter-&gt;getInventory(outfile);</code> führt erst die obige Methode getInventory() aus (die schreibt das Inventar in deine Datei) und schreibt anschließend den Rückgabewert (der identisch ist mit outfile) hinterher - ein ofstream kann nicht ge&quot;schrieben&quot; werden, aber er hat einen Umwandlungsoperator nach void* (hauptsächlich für Konstrukte ala &quot;while(datei)...&quot;) und wie er einen void* schreiben soll, weiß der Stream - als &quot;nee merkwürdige Adresse&quot;. Lass einfach den Teil &quot;outfile&lt;&lt;&quot; an dieser Anweisung weg, um das zu umgehen.</p>
<blockquote>
<blockquote>
<p>(oder du wendest einfach den operator&lt;&lt;() aus deinem ersten Beitrag auf alle Player des vector's an).</p>
</blockquote>
<p>??<br />
wie soll das aussehen?</p>
</blockquote>
<p>Dazu mußt du den operator von oben noch so erweitern, daß er auch das Inventar ausgibt - und schon kann der Schleifenrumpf zusammengestaucht werden auf ein einfaches <code>outfile&lt;&lt;*iter;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312151</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 23 Jun 2007 13:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 13:46:32 GMT]]></title><description><![CDATA[<p>&lt;&lt;*iter , hehe stimmt das is nee coole idee hehe ,danke !!</p>
<p>so jetzt zum speicherleck problem, ich hoffe es ist jetzt nicht so dreist<br />
die komplette main zu posten. aber ich weiss nicht wo ich die delete´s reinsetzten soll, muss!</p>
<pre><code class="language-cpp">// KLSS04.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include &quot;stdafx.h&quot;
#include &quot;Item.h&quot;
#include &quot;Player.h&quot;
#include &quot;Food.h&quot;
#include &quot;Weapon.h&quot;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
#include &lt;stdexcept&gt;
#include &lt;conio.h&gt;// für _getch()

using namespace std;

void menu();

int _tmain(int argc, _TCHAR* argv[])
{
	std::vector&lt;Player&gt; allPlayers;
	std::ostream_iterator&lt;Player&gt;output(cout, &quot; &quot;);

	Player *pPlayer=NULL;

	menu();
	bool end=false;
	do
	{

		char choice;
		choice = _getch();

		switch(choice)
		{
		case '1': 
			{	string plname;
			int plweight;
			cout&lt;&lt;&quot;\nNeuer Spielername eingeben: &quot;;
			cin&gt;&gt;plname;
			cout&lt;&lt;&quot;Maximum-Gewicht eingeben:&quot;;
			cin&gt;&gt;plweight;;
			pPlayer= new Player(plname,plweight);
			allPlayers.push_back(*pPlayer);
			std::sort(allPlayers.begin(),allPlayers.end());
			cin.clear();

			}break;
		case '2':	
			{
				cout&lt;&lt;&quot; Alle Spieler anzeigen:&quot;;
				std::copy(allPlayers.begin(), allPlayers.end(),output);

			}break;

		case '3':
			{
				if(!allPlayers.empty())
				{
					cout&lt;&lt;&quot; Gegenstand aufnehmen:\n&quot;;

					cout&lt;&lt;&quot;Was wollen Sie aufnehmen Food oder Weapon?:&quot;;
					cout&lt;&lt;&quot;\n0 Food:\n&quot;
						&lt;&lt;&quot;1 Weapon:\n&quot;
						&lt;&lt;&quot;ihre Wahl?:&quot;;

					char choice;
					choice = _getch();

					switch(choice)
					{
					case '0':{
						string foodname;int feedingValue; int foodweight;
						cout&lt;&lt;&quot;\nWelches Nahrungmittel wollen sie aufnehmen?:&quot;;
						cin&gt;&gt;foodname;
						cout&lt;&lt;&quot;\nGeben Sie den Naehrwert an:&quot;;
						cin&gt;&gt;feedingValue;
						cout&lt;&lt;&quot;\nGeben Sie nun das Gewicht ein:&quot;;
						cin&gt;&gt;foodweight;

						Item *pItem= new Food(foodname,feedingValue,foodweight);
						std::copy(allPlayers.begin(), allPlayers.end(),output);
						cout&lt;&lt;&quot; Zu welchem Spieler soll der Gegenstand hinzugefuegt werden?:&quot;;
						string pname;
						cin&gt;&gt;pname;
						bool exist=false;
						for (std::vector&lt; Player &gt;::iterator location=allPlayers.begin(); location!=allPlayers.end(); location++)
						{
							if (location-&gt;getName()==pname)
							{
								location-&gt;addItem(*pItem);
								exist=true;
							}
						}
						if (exist==false){cout&lt;&lt;&quot;Name nicht vorhanden!\n!&quot;;}
							 }
						break;
					case'1':{
						string weaponname;int attackValue; int weaponweight;
						cout&lt;&lt;&quot;\nWelcher Waffe wollen sie aufnehmen?:&quot;;
						cin&gt;&gt;weaponname;
						cout&lt;&lt;&quot;\nGeben Sie den Vernichtungsgrad an:&quot;;
						cin&gt;&gt;attackValue;
						cout&lt;&lt;&quot;\nGeben Sie nun das Gewicht ein:&quot;;
						cin&gt;&gt;weaponweight;

						Item *pItem= new Weapon(weaponname,attackValue,weaponweight);
						std::copy(allPlayers.begin(), allPlayers.end(),output);
						cout&lt;&lt;&quot; Zu welchem Spieler soll der Gegenstand hinzugefuegt werden?:&quot;;
						string pname;
						cin&gt;&gt;pname;
						bool exist=false;
						for (std::vector&lt; Player &gt;::iterator location=allPlayers.begin(); location!=allPlayers.end(); location++)
						{
							if (location-&gt;getName()==pname)
							{
								location-&gt;addItem(*pItem);
								exist=true;
							}
						}
						if (exist==false){cout&lt;&lt;&quot;Name nicht vorhanden!\n!&quot;;}

							}break;

					default:{
						cerr&lt;&lt;&quot;Incorrect choice&quot;&lt;&lt;endl;
							}break;
				}//end switch	
				}else{cout&lt;&lt;&quot; Kein Spieler vorhanden, erst hinzufuegen!\n&quot;;}		

			}break;

		case'4': { 
					cout&lt;&lt;&quot;\nSpiel speichern&quot;;
					if(!allPlayers.empty())
					{
						string dateiname;
						cout&lt;&lt;&quot;\nBitte Dateiname eingeben *.txt: &quot;;
						cin&gt;&gt;dateiname;
						ofstream outfile(dateiname.c_str(), ios::out);
						if(!outfile)
						{
							cerr&lt;&lt;&quot;File could not be opened&quot;&lt;&lt;endl;
							exit(1);
						}
						std::vector&lt;Player&gt;::const_iterator iter; 
						for(iter=allPlayers.begin(); iter!=allPlayers.end(); ++iter) 
						{ 

							//outfile&lt;&lt;*iter; ausgabe über &lt;&lt;operator
							outfile&lt;&lt;iter-&gt;getName()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getMaximumWeight()&lt;&lt;&quot;\n&quot;
								&lt;&lt;iter-&gt;getCurrentWeight()&lt;&lt;&quot;\n&quot;;
							outfile&lt;&lt;iter-&gt;getInventory(outfile);
						}
						outfile.close();

					}else {cout&lt;&lt;&quot; zuerst Datensatz einlesen!\n&quot;;}
				 }break;
		case'5':{
					cout&lt;&lt;&quot;\nSpiel laden\n&quot;;
				}break;

		case '6':{
					cout&lt;&lt;&quot;\nProgramm wird beendet\n&quot;;
					end=true;
				 } break;

			default:
				cerr&lt;&lt;&quot;Incorrect choice&quot;&lt;&lt;endl;
				break;
		}//end switch	
		if(!end)
		{	
			menu();
		}

	}while(!end==true);

	delete []pPlayer;

	return 0;
}

void menu()
{
	cout&lt;&lt;&quot;Enter your choice:\n&quot;
		&lt;&lt;&quot;1 Neuer Spieler\n&quot;
		&lt;&lt;&quot;2 Alle Spieler anzeigen\n&quot;
		&lt;&lt;&quot;3 Gegenstand aufnehmen\n&quot;
		&lt;&lt;&quot;4 Spiel Speichern\n&quot;
		&lt;&lt;&quot;5 Spiel Laden\n&quot;
		&lt;&lt;&quot;6 Spiel beenden\n bitte waehlen:&quot;;
}
</code></pre>
<p>wo , an welchen stellen , sollte ich delete verwenden? hmmm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312166</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 13:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 13:54:55 GMT]]></title><description><![CDATA[<p>Am besten gar nicht (und das new brauchst du auch nicht). Du kannst die Variable problemlos auf dem Stack anlegen, dann kümmert sich das Programm selber darum, sie wieder freizugeben.</p>
<pre><code class="language-cpp">case '1': 
{
    string plname;
    int plweight;
    cout&lt;&lt;&quot;\nNeuer Spielername eingeben: &quot;;
    cin&gt;&gt;plname;
    cout&lt;&lt;&quot;Maximum-Gewicht eingeben:&quot;;
    cin&gt;&gt;plweight;;
    Player pl(plname,plweight);
    allPlayers.push_back(pl);
    std::sort(allPlayers.begin(),allPlayers.end());
    break;
}
</code></pre>
<p>(PS: bist du zufällig Java-Programmierer?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312171</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 23 Jun 2007 13:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to In klasse auf std::liste zugreifen on Sat, 23 Jun 2007 22:21:28 GMT]]></title><description><![CDATA[<p>jain,</p>
<pre><code>sten&lt;&lt;&quot;student is&quot;
</code></pre>
<p>grade am erlernen von beiden. in 10 tagen ist meine prüfung in c++ und habe noch einige schwächen. grade bei dynamischer speicherverwaltung und vererbung.<br />
leider muss ich mit dynamischer erzeugung dieses programm bewältigen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> .frag mich auch was das soll, aber iss wohl so.. deshalb muss ich new und delete verwenden. fühl mich schon wie ein spaghetti-code-programmierer und bin in manchen dingen einer <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="😉"
    /> . Jedoch bin ich für alle hilfe die du, ihr mir bietet sehr dankbar und hab durch das forum schon viel gelernt <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="🙂"
    /> , desshalb vielen dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1312494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1312494</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sat, 23 Jun 2007 22:21:28 GMT</pubDate></item></channel></rss>