<?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[stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie?]]></title><description><![CDATA[<p>Ok jetzt wirds krass, ich mute euch jetzt ziemlich viel zu, aber eventuell erbarmt sich einer (jedoch wär ich net böse wenn ich keine antwort erhalte, dafür hab ich schon zuviel hilfe von euch bekommen)<br />
habe hier folgendes.. ich habe eine klasse town und eine abstakte Klasse building und die vererbt, d.h. noch weitere 4 unterklassen hier nur eine angeführt mit namen Marketplace.. Es ist vorgabe das Building abstract ist.<br />
so das coding :</p>
<pre><code class="language-cpp">//town.h
#pragma once
#include &lt;string&gt;
using std::string;
#include &lt;iostream&gt;
using std::ostream;
using std::endl;
using std::cout;
#include &lt;list&gt;
#include &quot;Building.h&quot;
#include &lt;iterator&gt;
#include &lt;typeinfo&gt;

class Building;
class Town
{
//friend ostream&amp;operator&lt;&lt;(ostream&amp;, const  Town const &amp;t);
friend ostream&amp; operator&lt;&lt;(ostream&amp; out, Town const* d);
protected:
	std::list&lt;Building*&gt; buildinglist;

public:
	Town(const string&amp; townName);
	Town(const Town&amp; src);//copyconstructor wg kopieren in liste?!
	virtual ~Town(void);
	void setTownName();
	void setTownSize		(int townSize);
	void setTownMoney		(int townMoney);
	void setTownResearch	(int townResearch);
	void setTownLuxuryGoods	(int townLuxury);

	string getTownName()	const;
	int getTownSize()		const;
	int getTownMoney()		const;
	int getTownResearch()	const;
	int getTownLuxuryGoods()const;
	void grow();
	void insertBuilding(Building&amp; b);
	bool operator&lt;(const Town&amp; value) const;

	void print()const; //ausgabe welche gebäude existieren
{

		std::list&lt;Building*&gt;::const_iterator iter;
		for(iter=buildinglist.begin(); iter!=buildinglist.end(); ++iter)
		{	cout&lt;&lt;typeid(Building).name();

		} //????
			//cout&lt;&lt;typeid(Building).name();
		//hier gibs nur die adresse aber nicht was für ein gebäude es ist!
		/*std::ostream_iterator&lt;Building*&gt;output(cout,&quot; &quot;);
		cout&lt;&lt;&quot;Gebaeude:&quot;;
		std::copy(buildinglist.begin(), buildinglist.end(),output);*/	
}

private:
	string makeCompareable(const string&amp; str) const;
	string name;
	int size;
	int money;
	int research;
	int luxuryGoods;	 

};//end Class Town

inline ostream&amp; operator&lt;&lt;( ostream&amp; out,  Town const &amp;t ) 
{ 
	out&lt;&lt;std::left&lt;&lt;&quot;Stadt:\t\t&quot;&lt;&lt;t.getTownName()
		&lt;&lt;&quot; \nhat groesse:\t&quot;&lt;&lt;t.getTownSize()
		&lt;&lt;&quot; \nbesitzt:\t&quot;&lt;&lt;t.getTownMoney()&lt;&lt;&quot; Euro.&quot;
		&lt;&lt;&quot; \nund hat:\t&quot;&lt;&lt;t.getTownLuxuryGoods()&lt;&lt;&quot; Luxusgueter.&quot;
		&lt;&lt;&quot; \nund Wissen:\t&quot;&lt;&lt;t.getTownResearch()&lt;&lt;&quot; IQ.&quot;
		&lt;&lt;&quot;\n******************************&quot;&lt;&lt;endl;
		t.print(); // für die ausgabe welche gebäude existieren

		/* //nicht möglich da town hmm wie ausgebebn??
std::ostream_iterator&lt;Building*&gt;output(cout, &quot; &quot;);
		cout&lt;&lt;&quot;Gebaeude:&quot;;
		std::copy(Town::buildinglist.begin(), Town::buildinglist.end(),output);*/
	return out; 
}
</code></pre>
<pre><code class="language-cpp">#pragma once
#include &quot;Town.h&quot;
class Town;
class Building 
{ 
public: 
    Building(Town&amp; parent); // Pointer auf die verwaltende Stadt 
    virtual ~Building(void); 
    virtual void improveTown()=0; 
	virtual string getBuildingName()const=0;

protected:
    Town&amp; refTown; 
};
</code></pre>
<pre><code class="language-cpp">#pragma once
#include &quot;building.h&quot;
#include &quot;town.h&quot;

//class Town;
//class Building;
class Marketplace :
	public Building
{
public:
	Marketplace(Town&amp;);
	virtual ~Marketplace(void);
	virtual void improveTown();
	virtual string getBuildingName()const;

private:
	int moneyAdder;

protected:
	string name;
};
</code></pre>
<p>so also das problem ist die ausgabe wenn ich ein town erstelle und dannach ein Building hier nur implementiert &quot;Marketplace&quot; .. .<br />
Vorgehensweise: console<br />
erst &quot;Neue stadt&quot; dann &quot;neues Gebaeude&quot; und dann &quot;Marketplace&quot; und danach alle städte ausgeben ,<br />
soll erscheinen:</p>
<pre><code>Stadt:   Heidelberg
hat grosse: 1
und hat: 1 luxugüter
und : 1 IQ
***********************
Gebäude : Marketplace //hier können natürlich mehrere gebäude stehen auch mehrere Marketplaces
</code></pre>
<p>//hier gebe ich bisher nur aus &quot;!class Building&quot; weil ich eben nicht weiss wie ich auf diese liste zugreife und das attribut name von Marketplace zugreife, ich hatte es probiert über die zugriffs_memberfunktion<br />
getBuildingName die abstrakt ist aber das geht nicht.. vielleicht hab ich auch nicht richtig zugegriffen .. also wenn es nicht zuviel verlangt ist.. (ich weiss es ist viel , aber jeder der will darf gerne helfen <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="🙂"
    /> ) wäre sehr dankbar :))</p>
<p>Also zeigt was ihr draufhabt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><strong>ps.<br />
wurde editiert auf wunsch das wesentliche, dh. augenmerk auf printfunktion</strong></p>
<p>hier der gesamte code zum testen<br />
<a href="http://www.icefighters.eu/uk/UK12.rar" rel="nofollow">http://www.icefighters.eu/uk/UK12.rar</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184614/stl-list-und-vererbung-eine-liste-in-einer-liste-ausgeben-und-zugreifen-wie</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 22:21:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184614.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Jun 2007 12:54:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Sun, 17 Jun 2007 13:50:47 GMT]]></title><description><![CDATA[<p>Ok jetzt wirds krass, ich mute euch jetzt ziemlich viel zu, aber eventuell erbarmt sich einer (jedoch wär ich net böse wenn ich keine antwort erhalte, dafür hab ich schon zuviel hilfe von euch bekommen)<br />
habe hier folgendes.. ich habe eine klasse town und eine abstakte Klasse building und die vererbt, d.h. noch weitere 4 unterklassen hier nur eine angeführt mit namen Marketplace.. Es ist vorgabe das Building abstract ist.<br />
so das coding :</p>
<pre><code class="language-cpp">//town.h
#pragma once
#include &lt;string&gt;
using std::string;
#include &lt;iostream&gt;
using std::ostream;
using std::endl;
using std::cout;
#include &lt;list&gt;
#include &quot;Building.h&quot;
#include &lt;iterator&gt;
#include &lt;typeinfo&gt;

class Building;
class Town
{
//friend ostream&amp;operator&lt;&lt;(ostream&amp;, const  Town const &amp;t);
friend ostream&amp; operator&lt;&lt;(ostream&amp; out, Town const* d);
protected:
	std::list&lt;Building*&gt; buildinglist;

public:
	Town(const string&amp; townName);
	Town(const Town&amp; src);//copyconstructor wg kopieren in liste?!
	virtual ~Town(void);
	void setTownName();
	void setTownSize		(int townSize);
	void setTownMoney		(int townMoney);
	void setTownResearch	(int townResearch);
	void setTownLuxuryGoods	(int townLuxury);

	string getTownName()	const;
	int getTownSize()		const;
	int getTownMoney()		const;
	int getTownResearch()	const;
	int getTownLuxuryGoods()const;
	void grow();
	void insertBuilding(Building&amp; b);
	bool operator&lt;(const Town&amp; value) const;

	void print()const; //ausgabe welche gebäude existieren
{

		std::list&lt;Building*&gt;::const_iterator iter;
		for(iter=buildinglist.begin(); iter!=buildinglist.end(); ++iter)
		{	cout&lt;&lt;typeid(Building).name();

		} //????
			//cout&lt;&lt;typeid(Building).name();
		//hier gibs nur die adresse aber nicht was für ein gebäude es ist!
		/*std::ostream_iterator&lt;Building*&gt;output(cout,&quot; &quot;);
		cout&lt;&lt;&quot;Gebaeude:&quot;;
		std::copy(buildinglist.begin(), buildinglist.end(),output);*/	
}

private:
	string makeCompareable(const string&amp; str) const;
	string name;
	int size;
	int money;
	int research;
	int luxuryGoods;	 

};//end Class Town

inline ostream&amp; operator&lt;&lt;( ostream&amp; out,  Town const &amp;t ) 
{ 
	out&lt;&lt;std::left&lt;&lt;&quot;Stadt:\t\t&quot;&lt;&lt;t.getTownName()
		&lt;&lt;&quot; \nhat groesse:\t&quot;&lt;&lt;t.getTownSize()
		&lt;&lt;&quot; \nbesitzt:\t&quot;&lt;&lt;t.getTownMoney()&lt;&lt;&quot; Euro.&quot;
		&lt;&lt;&quot; \nund hat:\t&quot;&lt;&lt;t.getTownLuxuryGoods()&lt;&lt;&quot; Luxusgueter.&quot;
		&lt;&lt;&quot; \nund Wissen:\t&quot;&lt;&lt;t.getTownResearch()&lt;&lt;&quot; IQ.&quot;
		&lt;&lt;&quot;\n******************************&quot;&lt;&lt;endl;
		t.print(); // für die ausgabe welche gebäude existieren

		/* //nicht möglich da town hmm wie ausgebebn??
std::ostream_iterator&lt;Building*&gt;output(cout, &quot; &quot;);
		cout&lt;&lt;&quot;Gebaeude:&quot;;
		std::copy(Town::buildinglist.begin(), Town::buildinglist.end(),output);*/
	return out; 
}
</code></pre>
<pre><code class="language-cpp">#pragma once
#include &quot;Town.h&quot;
class Town;
class Building 
{ 
public: 
    Building(Town&amp; parent); // Pointer auf die verwaltende Stadt 
    virtual ~Building(void); 
    virtual void improveTown()=0; 
	virtual string getBuildingName()const=0;

protected:
    Town&amp; refTown; 
};
</code></pre>
<pre><code class="language-cpp">#pragma once
#include &quot;building.h&quot;
#include &quot;town.h&quot;

//class Town;
//class Building;
class Marketplace :
	public Building
{
public:
	Marketplace(Town&amp;);
	virtual ~Marketplace(void);
	virtual void improveTown();
	virtual string getBuildingName()const;

private:
	int moneyAdder;

protected:
	string name;
};
</code></pre>
<p>so also das problem ist die ausgabe wenn ich ein town erstelle und dannach ein Building hier nur implementiert &quot;Marketplace&quot; .. .<br />
Vorgehensweise: console<br />
erst &quot;Neue stadt&quot; dann &quot;neues Gebaeude&quot; und dann &quot;Marketplace&quot; und danach alle städte ausgeben ,<br />
soll erscheinen:</p>
<pre><code>Stadt:   Heidelberg
hat grosse: 1
und hat: 1 luxugüter
und : 1 IQ
***********************
Gebäude : Marketplace //hier können natürlich mehrere gebäude stehen auch mehrere Marketplaces
</code></pre>
<p>//hier gebe ich bisher nur aus &quot;!class Building&quot; weil ich eben nicht weiss wie ich auf diese liste zugreife und das attribut name von Marketplace zugreife, ich hatte es probiert über die zugriffs_memberfunktion<br />
getBuildingName die abstrakt ist aber das geht nicht.. vielleicht hab ich auch nicht richtig zugegriffen .. also wenn es nicht zuviel verlangt ist.. (ich weiss es ist viel , aber jeder der will darf gerne helfen <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="🙂"
    /> ) wäre sehr dankbar :))</p>
<p>Also zeigt was ihr draufhabt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><strong>ps.<br />
wurde editiert auf wunsch das wesentliche, dh. augenmerk auf printfunktion</strong></p>
<p>hier der gesamte code zum testen<br />
<a href="http://www.icefighters.eu/uk/UK12.rar" rel="nofollow">http://www.icefighters.eu/uk/UK12.rar</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307659</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sun, 17 Jun 2007 13:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Sun, 17 Jun 2007 13:03:57 GMT]]></title><description><![CDATA[<p>sten schrieb:</p>
<blockquote>
<p>also wenn es nicht zuviel verlangt ist..</p>
</blockquote>
<p>Wenn der ganze Code den du gepostet hast wirklich relevant ist, wird das den meisten hier wohl tatsächlich zu viel sein. Ansonsten wäre es weniger unhöflich und auch wesentlich aussichtsreicher wenn du deine Frage noch einmal dementsprechend überarbeiten würdest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307662</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sun, 17 Jun 2007 13:03:57 GMT</pubDate></item><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Sun, 17 Jun 2007 14:07:37 GMT]]></title><description><![CDATA[<p>gesagt getan <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/1307709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307709</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Sun, 17 Jun 2007 14:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Sun, 17 Jun 2007 15:24:31 GMT]]></title><description><![CDATA[<p>Nicht sicher ob ich dich richtig verstehe (du schreibst ein wenig konfus <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="😉"
    /> ), aber dies Standardidiom könnte dir weiterhelfen:</p>
<pre><code class="language-cpp">class Building
{
public:
  virtual std::ostream&amp; print( std::ostream&amp; out ) const = 0;
};

std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, Building const* obj )
{
  return obj-&gt;print(out);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1307778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307778</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sun, 17 Jun 2007 15:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Mon, 18 Jun 2007 08:14:37 GMT]]></title><description><![CDATA[<p>Hi sten, ich glaube, du &quot;verzettelst&quot; dich ein bißchen bei deinem Code (und deinen Kenntnissen).<br />
Du hast nämlich einige Programmier- und Designfehler drin.<br />
Versuche einfach jede Klasse erstmal einzeln zu erstellen und zu testen.</p>
<p>Du willst im Stream-Operator &lt;&lt; (bzw. der Methode Town::print) auf die Gebäude zugreifen.<br />
Das Iterieren ist ja schon richtig, du mußt dann einfach mittels der Iteratorvariablen auf das Element zugreifen.</p>
<pre><code class="language-cpp">inline ostream&amp; operator&lt;&lt;( ostream&amp; out,  Town const &amp;t ) 
{ 
  t.print(); // für die ausgabe welche gebäude existieren

  // oder folgendes
  std::ostream_iterator&lt;Building*&gt;output(cout, &quot; &quot;);
  cout&lt;&lt;&quot;Gebaeude:&quot;;
  std::copy(t.GetBuildingList().begin(), t.GetBuildingList.end(), output);
  return out;
}
</code></pre>
<p>Jetzt mußt du nur noch Town::GetBuildingList() sowie den Stream-Operator &lt;&lt; für Buildings deklarieren und implementieren.<br />
Oder aber du benutzt Town::print (wobei ich diese Methode entweder printBuildings nennen würde oder aber alle Town-Infos dort ausgeben würde).</p>
<pre><code class="language-cpp">void print()const; //ausgabe welche gebäude existieren
{
  std::list&lt;Building*&gt;::const_iterator iter;
  for(iter=buildinglist.begin(); iter!=buildinglist.end(); ++iter)
  {
    cout &lt;&lt; (*iter)-&gt;getBuildingName() &lt;&lt; &quot;, &quot;; // diese Methode hattest du ja extra dafür implementiert, also kannst du sie auch benutzen -)
  }
}
</code></pre>
<p>P.S. typeid().name() gibt dir nur den compilerinternen Namen der Klasse aus (damit fängst du recht wenig an)</p>
<p>Edit: Tippfehler korrigiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308193</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 18 Jun 2007 08:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to stl::list und vererbung , eine liste in einer liste ausgeben und zugreifen wie? on Mon, 18 Jun 2007 09:47:06 GMT]]></title><description><![CDATA[<p>(*iter)-&gt;getBuildingName() , genau das hat mir gefehlt <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="🙂"
    /> *freu</p>
<p>mir war die schreibweise (*iter) nicht bekannt bzw hab nicht daran gedacht , danke für deine hilfe..<br />
das mit dem typeid war mir schon bewusst gewesen ich wollte das der erstmal überhaupt irgendwas anzeigt. und ja die namenkonventionen muss ich noch ändern die sind nicht aussagekräftig <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="😉"
    /><br />
die restlichen //comments waren ausdruck meiner verzweifelten suche nach der lösung. die du/Ihr mir jetzt gebracht habt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308248</guid><dc:creator><![CDATA[sten]]></dc:creator><pubDate>Mon, 18 Jun 2007 09:47:06 GMT</pubDate></item></channel></rss>