<?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[for_each ausgabe einer klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Probelm mit ausgabe einer klasse.</p>
<p>das funktioniert:</p>
<pre><code class="language-cpp">void console(int&amp; i)
{
    cout&lt;&lt;i&lt;&lt;endl;
    }

main()
...
list&lt;int&gt; test;
    for(int i=0; i&lt;6; i++)test.push_front(i);
    for_each(test.begin(), test.end(), console); 
...
</code></pre>
<p>aber wenn ich jetzt meine adressklasse, die ich in list einfüge, am Bildschirm ausgeben will, funktioniert das nicht...</p>
<pre><code class="language-cpp">Adressliste mylist;
mylist.eingabe();
list&lt;Adressliste&gt; freunde;
freunde.push_front(mylist);
for_each(freunde.begin(), freunde.end(), console);
</code></pre>
<p>in der adressliste.h steht:</p>
<pre><code class="language-cpp">class Adressliste
{  string name, vorname, telefon;
      public:
            Adressliste(){}
            void eingabe();
            void ausgabe();
            void console(Adressliste&amp; T);    
};
</code></pre>
<p>in der zugehörigen cpp:</p>
<pre><code class="language-cpp">void Adressliste::console(Adressliste&amp; T)
{
    cout&lt;&lt;T.name&lt;&lt;T.vorname&lt;&lt;T.telefon&lt;&lt;endl;
    }
</code></pre>
<p>im zweiten code in for_each console steht, liegt mein problem... ich weiß das ich die Methode von adressliste nicht so aufrufen kann, aber wie kann ich die liste so übergeben damit ich die auch am bildschirm ausgeben werden kann?</p>
<p>Wenn ich zuvor ein Objekt von der Adressliste erstelle und dann z.B. &quot;mylist.console()&quot; schreibe, funktioniert das auch nicht. <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="😞"
    /></p>
<p>Wäre super wenn mir einer helfen könnte mein problemchen zu lösen.</p>
<p>MfG<br />
Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235521/for_each-ausgabe-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 00:44:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235521.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Mar 2009 11:37:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 11:40:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein kleines Probelm mit ausgabe einer klasse.</p>
<p>das funktioniert:</p>
<pre><code class="language-cpp">void console(int&amp; i)
{
    cout&lt;&lt;i&lt;&lt;endl;
    }

main()
...
list&lt;int&gt; test;
    for(int i=0; i&lt;6; i++)test.push_front(i);
    for_each(test.begin(), test.end(), console); 
...
</code></pre>
<p>aber wenn ich jetzt meine adressklasse, die ich in list einfüge, am Bildschirm ausgeben will, funktioniert das nicht...</p>
<pre><code class="language-cpp">Adressliste mylist;
mylist.eingabe();
list&lt;Adressliste&gt; freunde;
freunde.push_front(mylist);
for_each(freunde.begin(), freunde.end(), console);
</code></pre>
<p>in der adressliste.h steht:</p>
<pre><code class="language-cpp">class Adressliste
{  string name, vorname, telefon;
      public:
            Adressliste(){}
            void eingabe();
            void ausgabe();
            void console(Adressliste&amp; T);    
};
</code></pre>
<p>in der zugehörigen cpp:</p>
<pre><code class="language-cpp">void Adressliste::console(Adressliste&amp; T)
{
    cout&lt;&lt;T.name&lt;&lt;T.vorname&lt;&lt;T.telefon&lt;&lt;endl;
    }
</code></pre>
<p>im zweiten code in for_each console steht, liegt mein problem... ich weiß das ich die Methode von adressliste nicht so aufrufen kann, aber wie kann ich die liste so übergeben damit ich die auch am bildschirm ausgeben werden kann?</p>
<p>Wenn ich zuvor ein Objekt von der Adressliste erstelle und dann z.B. &quot;mylist.console()&quot; schreibe, funktioniert das auch nicht. <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="😞"
    /></p>
<p>Wäre super wenn mir einer helfen könnte mein problemchen zu lösen.</p>
<p>MfG<br />
Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673395</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 11:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 12:51:44 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>ich habe ein kleines Probelm mit ausgabe einer klasse.</p>
</blockquote>
<p>Grundsätzlich eine Frage vorneweg:<br />
Ist dir der unterschied zwischen Funktionen, statischen Methoden (Methode = Funktion einer Klasse) und nicht-statischen Methoden bekannt?</p>
<p>Natürlich kann deine std::for_each nicht funktionieren wenn du weder den richtigen Namen angibst (console war deine freie Funktion, die Methode console ist über Adressliste::console zu erreichen, _aber_ da es sich um eine nicht-statische Methode handelt, würde es so auch nicht klappen [nicht-statische Methoden benötigen ein Objekt auf dem sie angewendet werden]).</p>
<p>Vielleicht solltest du dir mal den TR1 oder Boost, genauer...<br />
- std::tr1::bind (Header &lt;functional&gt; sofern dein Compiler den TR1 beherrscht)<br />
- boost::bind (Header &lt;boost/bind.hpp&gt; unter Verwendung der Boost-Bibliothek)<br />
...ansehen</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673416</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 03 Mar 2009 12:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 13:09:17 GMT]]></title><description><![CDATA[<p>Oder er geht den gängigen Weg und überläd die Eingabe und Ausgabe Operatoren <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;algorithm&gt;

class Address {
private:
	std::string lastname_, firstname_, phone_;
public:
	Address(){}
	std::string lastname() const { return lastname_; }
	void set_lastname(const std::string&amp; lastname) { lastname_ = lastname; }
	std::string firstname() const { return firstname_; }
	void set_firstname(const std::string&amp; firstname) { firstname_ = firstname; }
	std::string phone() const { return phone_; }
	void set_phone(const std::string&amp; phone) { phone_ = phone; }
};
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Address&amp; address) {
	os &lt;&lt; &quot;Lastname:  &quot; &lt;&lt; address.lastname() &lt;&lt; &quot;\n&quot;
	   &lt;&lt; &quot;Firstname: &quot; &lt;&lt; address.firstname() &lt;&lt; &quot;\n&quot;
	   &lt;&lt; &quot;Phone:     &quot; &lt;&lt; address.phone() &lt;&lt; std::endl;
	return os;
}
std::istream&amp; operator&gt;&gt;(std::istream&amp; is, Address&amp; address) {
	std::string input;
	std::cout &lt;&lt; &quot;Please enter the lastname: &quot;;
	is &gt;&gt; input;
	address.set_lastname(input);
	std::cout &lt;&lt; &quot;Please enter the firstname: &quot;;
	is &gt;&gt; input;
	address.set_firstname(input);
	std::cout &lt;&lt; &quot;Please enter the phonenumber: &quot;;
	is &gt;&gt; input;
	address.set_phone(input);
	return is;
}

void console(const Address&amp; address) {
	std::cout &lt;&lt; address &lt;&lt; std::endl;
}

int main(int argc, char* argv[]) {
	Address a, b, c;
	std::list&lt;Address&gt; lst;
	std::cin &gt;&gt; a;
	lst.push_front(a);
	std::cin &gt;&gt; b;
	lst.push_front(b);
	std::cin &gt;&gt; c;
	lst.push_front(c);

	for_each(lst.begin(), lst.end(), &amp;console);
	return 0;
}
</code></pre>
<p>Gut Schuß<br />
VuuRWerK <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>[edit]Angepasst für Verwendung von for_each![/edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673424</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Tue, 03 Mar 2009 13:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 13:55:07 GMT]]></title><description><![CDATA[<p>Danke euch.<br />
Ja, ich weiß was methoden und funktionen sind.</p>
<p>Ich habe es jetzt so gelöst:</p>
<p>Habe eine klasse adresse erstellt, eine klasse adressliste und habe die klasse adresse vererbt.</p>
<p>in der klasse adresse die ein und ausgabeoperatoren überladen und schon hat es funktioniert. So ähnlich wie VuuRWerK, nur habe ich die list in der klasse adressliste mit eingebaut <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>
<p>Das mit der console war von meiner seite wohl etwas schlecht geschildert.</p>
<p>Danke.<br />
MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673456</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 13:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:25:04 GMT]]></title><description><![CDATA[<p>Die Frage ist ob deine Vererbung Sinn macht.Weil laut deiner Logik müsste es ja dann heißen</p>
<p>Die Klasse Adressliste <strong>ist eine</strong> Adresse</p>
<p>Ich weiß nicht ob das wirklich stimmt, dazu kenne ich deinen Code nicht, aber von der Logik her, ist es doch eigentlich nicht der Fall oder?;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673480</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:38:42 GMT]]></title><description><![CDATA[<p>Meine Klassen schauen jetzt so aus:</p>
<p>adressliste.h</p>
<pre><code class="language-cpp">#include &quot;adresse.h&quot;
#include &lt;list&gt;

class Adressliste:public Adresse
{     list&lt;Adresse&gt; liste;
      public:
             void eingabe();
             void ausgabe();
             void savetofile();
             void loadfromfile();

};
</code></pre>
<p>adresse.h</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

class Adresse
{     protected:
      string name, vorname, telefonnr;
      public:
             Adresse(string n=&quot;&quot;, string v=&quot;&quot;, string t=&quot;&quot;);
             friend ostream&amp; operator&lt;&lt;(ostream&amp; o, Adresse&amp; T);
             friend istream&amp; operator&gt;&gt;(istream&amp; i, Adresse&amp; T);

};
</code></pre>
<p>Vielleicht macht es ja wirklich keinen großen sinn, aber ich denke so sollte ich es laut meiner aufgabenbeschreibung auch tun.</p>
<p>nur das loadfromfile bekomme ich noch nicht sauber hin. <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673501</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:42:46 GMT]]></title><description><![CDATA[<p>Also eine Adressliste ist definitiv keine Adresse...sondern eine Liste von Adressen, ich denke da Reicht es einfach wenn du der Adressliste ein Attribut vom Typ list&lt;Adresse&gt; gibst(wie schon passiert). Und das Vererben einfach weglässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673506</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:46:24 GMT]]></title><description><![CDATA[<p>Jetzt wo dus mir sagst, seh ich es auch. <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="🙂"
    /> stimmt, würde reichen.</p>
<p>Aber wie meinte der Lehrer dann das mit der vererbung..?... mhhh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673512</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:50:24 GMT]]></title><description><![CDATA[<p>Also in deiner aufgabenstellung habe ich nichts von Vererbung gelesen?:D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673517</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:50:24 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 14:55:12 GMT]]></title><description><![CDATA[<p><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>
<p>Am besten ich frag ihn morgen mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673524</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 14:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 15:12:25 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>So ähnlich wie VuuRWerK, nur habe ich die list in der klasse adressliste mit eingebaut <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>
</blockquote>
<p>Sofern der du einen geeigneten Operator hast, kanst du auch in einen Rutsch einen Container auf diesen ausgeben:</p>
<pre><code class="language-cpp">std::vector&lt;Address&gt; v;
//...
std::copy(v.begin(), v.end(), ostream_iterator&lt;Addresse&gt;(cout, &quot;\n&quot;));
// Gibt alle Addressen getrennt mit &quot;\n&quot; aus...
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673536</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 03 Mar 2009 15:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 19:18:05 GMT]]></title><description><![CDATA[<p>Jetzt habe ich ein anderes Problem...<br />
Der Borland Builder bringt mir eine stack overflow fehlermeldung bei öfterem starten des programms.</p>
<p>Ich zeige euch jetzt mal den kompletten code, bitte nicht lachen, etwas anfängerstyle hat er.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;adressliste.h&quot;
using namespace std;

int main()
{   Adressliste mylist;
    //mylist.loadfromfile();
    mylist.eingabe();
    mylist.eingabe();
    mylist.ausgabe();
    mylist.savetofile();
    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>adresse.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &quot;adresse.h&quot;

using namespace std;

Adresse::Adresse(string n, string v, string t)
{  name= n;
   vorname= v;
   telefonnr= t;
}

ostream&amp; operator&lt;&lt;(ostream&amp; o, Adresse&amp; T)
{   return o&lt;&lt;T.name&lt;&lt;&quot; &quot;&lt;&lt;T.vorname&lt;&lt;&quot; &quot;&lt;&lt;T.telefonnr&lt;&lt;endl;}

istream&amp; operator&gt;&gt;(istream&amp; i, Adresse&amp; T)
{   cout&lt;&lt;&quot;Name: &quot;;i&gt;&gt;T.name;
    cout&lt;&lt;&quot;Vorname: &quot;;i&gt;&gt;T.vorname;
    cout&lt;&lt;&quot;Telfonnummer: &quot;;i&gt;&gt;T.telefonnr;
    return i;}
</code></pre>
<p>adresse.h</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class Adresse
{     protected:
      string name, vorname, telefonnr;
      public:
             Adresse(string n=&quot;&quot;, string v=&quot;&quot;, string t=&quot;&quot;);
             friend ostream&amp; operator&lt;&lt;(ostream&amp; o, Adresse&amp; T);
             friend istream&amp; operator&gt;&gt;(istream&amp; i, Adresse&amp; T);
};
#endif
</code></pre>
<p>adressliste.cpp</p>
<pre><code class="language-cpp">#include &quot;adressliste.h&quot;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;fstream&gt;
using namespace std;

fstream f;

void Adressliste::eingabe()
{  Adresse tmp;
   cin&gt;&gt;tmp;
   liste.push_back(tmp);
   }

void console(Adresse&amp; T)
{  cout&lt;&lt;T;
   }

void Adressliste::ausgabe()
{  for_each(liste.begin(), liste.end(), console);
   }

void elementspeichern(Adresse &amp;tmp)
{  f&lt;&lt;tmp;
   }

void Adressliste::savetofile()
{  f.open(&quot;datei.txt&quot;, ios::out);
   if(!f)cout&lt;&lt;&quot;Fehler beim Oeffnen der Datei \&quot;datei.txt\&quot;!&quot;;
   else
   { for_each(liste.begin(), liste.end(), elementspeichern);
     f.close();
     }
   }

void Adressliste::loadfromfile()
{  Adresse tmp;
   f.open(&quot;datei.txt&quot;, ios::in);
   if(!f)cout&lt;&lt;&quot;Fehler beim Oeffnen der Datei \&quot;datei.txt\&quot;!&quot;;
   else
   { f&gt;&gt;tmp;
     while(!f.eof())
     {  liste.push_back(tmp);
        f&gt;&gt;tmp;
        }
     f.close();
     }
}
</code></pre>
<p>adressliste.h</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
#ifndef adresslisteH
#define adresslisteH
//---------------------------------------------------------------------------
#include &quot;adresse.h&quot;
#include &lt;list&gt;

class Adressliste:public Adresse
{     list&lt;Adresse&gt; liste;
      public:
             void eingabe();
             void ausgabe();
             void savetofile();
             void loadfromfile();
};
#endif
</code></pre>
<p>Genaue Fehlermeldung von Borland:</p>
<blockquote>
<p>Project adressliste.exe raised exception class EStackOverflow with message 'Stack overflow'. Process stopped. Use Step or Run to continue.</p>
</blockquote>
<p>Habe ich da irgendwo eine endlosschleife drin oder sowas?<br />
Danke schonmal.</p>
<p>MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673661</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 19:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 20:55:31 GMT]]></title><description><![CDATA[<p>Wo tritt die Exception auf? Kann es sein, dass du so viele Einträge hast, dass der Stack nicht mehr ausreicht? In dem Falle kannst du die Adressliste mit <code>new</code> dynamisch anlegen und mit <code>delete</code> wieder löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673697</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 Mar 2009 20:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 20:59:20 GMT]]></title><description><![CDATA[<p>dynamisch werde ich es morgen probieren,danke.<br />
Aber eigentlich sollte es doch bei 2 &quot;Adressen&quot; in der Liste funktionieren...</p>
<p>ich verstehs nicht...</p>
<p>Edit:<br />
Wie kann ich herausfinden wo die Exception auftritt?<br />
Wenn die Fehlermeldung kommt muss ich borland über den task manager schließen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673699</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 20:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 21:03:19 GMT]]></title><description><![CDATA[<p>Eben, wo tritt die Exception auf? Rekursion oder so hast du auch nicht im Spiel?</p>
<p>Übrigens solltest du die Strings als Const-Referenz statt als Kopie an die Funktionen übergeben. Und im Header kein <code>using namespace</code> verwenden, da dies den Namensraum für alle inkludierenden Dateien offenlegt und somit schnell zu Namenskonflikten führen kann.</p>
<p>Edit: Wenn du den Debugger benutzt, sollte das Programm bei einer Exception automatisch unterbrochen werden und zur Codestelle springen, bei der du dich gerade befindest. Ansonsten versuch es doch mal mit Konsolenausgaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673702</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 Mar 2009 21:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 21:10:33 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Eben, wo tritt die Exception auf?</p>
</blockquote>
<p>Leider weiß ich nicht was du damit meinst.. ich weiß nicht wo der fehler ist... borland blockiert dann.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Rekursion oder so hast du auch nicht im Spiel?</p>
</blockquote>
<p>Nein, es ist keine Rekursion im Spiel. Das ist der gesamte code.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Übrigens solltest du die Strings als Const-Referenz statt als Kopie an die Funktionen übergeben.</p>
</blockquote>
<p>Ok danke, werde ich anwenden. klingt auch logisch.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Und im Header kein <code>using namespace</code> verwenden, da dies den Namensraum für alle inkludierenden Dateien offenlegt und somit schnell zu Namenskonflikten führen kann.</p>
</blockquote>
<p>Das habe ich schon oft zu hören bekommen, aber unser toller Lehrer macht das nicht... keine ahnung warum nicht... aber im moment spielt das jetzt keine rolle oder?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Edit: Wenn du den Debugger benutzt, sollte das Programm bei einer Exception automatisch unterbrochen werden und zur Codestelle springen, bei der du dich gerade befindest. Ansonsten versuch es doch mal mit Konsolenausgaben.</p>
</blockquote>
<p>debugger richtig benutzen... leider auch noch nicht gelernt... hmpf...</p>
<p>ich probiers morgen mal mit <code>const &amp;string</code> und mit einem anderen compiler.</p>
<p>Danke dir.</p>
<p>MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673711</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Tue, 03 Mar 2009 21:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 21:19:40 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Das habe ich schon oft zu hören bekommen, aber unser toller Lehrer macht das nicht... keine ahnung warum nicht... aber im moment spielt das jetzt keine rolle oder?</p>
</blockquote>
<p>Ja, Lehrer sind selten Vorbilder. Nein, für dein aktuelles Problem ist das irrelevant, aber es kann dich vor künftigen Problemen bewahren und dir gleich einen guten Stil angewöhnen. <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>Gustl schrieb:</p>
<blockquote>
<p>debugger richtig benutzen... leider auch noch nicht gelernt... hmpf...</p>
</blockquote>
<p>Der Debugger ist wirklich sehr praktisch. Aber wie gesagt, für den Anfang reichen auch Konsolenausgaben, so kannst du den Fehler schon gut einschränken:</p>
<pre><code class="language-cpp">int main()
{
    std::cout &lt;&lt; &quot;Anfang von main()&quot; &lt;&lt; std::endl;
    // ...
    std::cout &lt;&lt; &quot;Vor dem Foo()-Aufruf&quot; &lt;&lt; std::endl;
    Foo();
    std::cout &lt;&lt; &quot;Nach dem Foo()-Aufruf&quot; &lt;&lt; std::endl;
    // ...
    std::cout &lt;&lt; &quot;Ende von main()&quot; &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1673723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673723</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 Mar 2009 21:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 22:04:22 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>dynamisch werde ich es morgen probieren,danke.<br />
Aber eigentlich sollte es doch bei 2 &quot;Adressen&quot; in der Liste funktionieren...</p>
</blockquote>
<p>Mir sind schon einige Dinge aufgefallen, u.a. würde ich globale Variablen vermeiden <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>Anbei mal eine weitere Variante, dir wird dir und deinen Lehrer wohl an einigen missfallen, aber nur damit du mal etwas anderes gesehen hast <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">// main.cpp
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;list&gt;
#include &lt;algorithm&gt;
#include &quot;adresse.h&quot;

// Ich habe die Adresseingabe (Behandlung von deiner UI [Console]) mal von der
// eigentlichen Programmlogik getrennt. Siehe auch Anmerkung in der adresse.cpp

// Einzelne Adresse eingeben
Adresse AdresseEingeben()
{
    std::string name;
    std::cout &lt;&lt; &quot;Name: &quot;;
    std::cin &gt;&gt; name;

    std::string vorname;
    std::cout &lt;&lt; &quot;Vorname: &quot;;
    std::cin &gt;&gt; vorname;

    std::string telefonnr;
    std::cout &lt;&lt;&quot;Telefonnummer: &quot;;
    std::cin &gt;&gt; telefonnr;

    return Adresse(name, vorname, telefonnr);
}

// Adressen aus Datei einlesen
std::list&lt;Adresse&gt; AdressenEinlesen(
    std::string const &amp; dateiname)
{
    std::list&lt;Adresse&gt; adressen;

	// 1. Datei Öffnen
	std::fstream datei(dateiname.c_str(), std::ios::in);
	if(datei.bad())
		return adressen;

	// 2. Daten übertragen
	std::copy(
		std::istream_iterator&lt;Adresse&gt;(datei),  // Vom Dateibegin...
		std::istream_iterator&lt;Adresse&gt;(),       // ...bis kein Eintrag mehr existiert
		std::back_insert_iterator&lt;std::list&lt;Adresse&gt; &gt;(adressen)); // an die Liste hängen

	return adressen;
}

// Adressen in Datei speichern
bool AdressenSpeichern(
    std::string const &amp; dateiname,
	std::list&lt;Adresse&gt; const &amp; adressen)
{
	// 1. Datei zum Schreiben öffnen
	std::fstream datei(dateiname.c_str(), std::ios::out);
	if(datei.bad()) {
		std::cout &lt;&lt; &quot;Fehler beim Oeffnen der Datei \&quot;&quot; &lt;&lt; dateiname &lt;&lt; &quot;\&quot;!&quot;;
		return false;
	}

	// 2. Daten in die Datei schreiben
	std::copy(
		adressen.begin(),  // Vom Listenbegin...
		adressen.end(),    // ...bis Listenende
		std::ostream_iterator&lt;Adresse&gt;(datei)); // an die Datei hängen

	return true;
}

int main()
{
	std::list&lt;Adresse&gt; adressen = AdressenEinlesen(&quot;datei.txt&quot;);
    adressen.push_back(AdresseEingeben());
    adressen.push_back(AdresseEingeben());
    adressen.push_back(AdresseEingeben());

    // Ausgabe auf der Console
	// Und zwar wird jedes Element der Liste an den entsprechenden Ausgabestream
	// übergeben, mit den dahinter angegebenen Trennzeichen
    std::copy(adressen.begin(), adressen.end(),
		std::ostream_iterator&lt;Adresse&gt;(std::cout, &quot;\n&quot;));

	// Ausgabe in einer Datei
	if(!AdressenSpeichern(&quot;datei.txt&quot;, adressen));

	system(&quot;PAUSE&quot;); // Würde ich mit Vorsicht verwenden
    return 0; // Unnötig, wird bei in der main-Funktion implizit gemacht
}
</code></pre>
<pre><code class="language-cpp">// Adresse.h
#ifndef ADRESSE_HEADER
#define ADRESSE_HEADER

#include &lt;string&gt;
#include &lt;iostream&gt;

// using namespace std;
// Bitte kein &quot;using namespace&quot; im Header, ansonsten brauch man garkeine
// Namensräume. using namespace im Header macht einen Namensraum global
// sichtbar, was nicht Sinn von Namensräumen ist.

class Adresse
{
    private: // Mach niemals etwas protected, wenn du dir nicht der Konsequenzen
             // bewusst bist.
        std::string name;       // Ich würde Variablen niemals in eine Reihe quetschen,
        std::string vorname;    // Anfänger machen dann gerne Fehler. Ich sag nur
        std::string telefonnr;  // int* a, b; =&gt; a=int-Zeiger, b=int

    public:
        Adresse(
            std::string const &amp; name = &quot;&quot;,      // Gerade im Header würde ich von
            std::string const &amp; vorname =&quot;&quot;,    // Abkürzungen die Finger lassen, der
            std::string const &amp; telefonnr =&quot;&quot;); // Header dient auch zur Übersicht.

        friend std::ostream &amp; operator&lt;&lt;(
            std::ostream &amp; stream,
            Adresse const &amp; adresse);
		friend std::istream &amp; operator&gt;&gt;(
            std::istream &amp; stream,
            Adresse &amp; adresse);

        std::string GetName() const;
        std::string GetVorname() const;
        std::string GetTelefonNr() const;
        void SetName(
            std::string const &amp; name);
        void SetVorname(
            std::string const &amp; vorname);
        void SetTelefonnr(
            std::string const &amp; telefonnr);
};

#endif
</code></pre>
<pre><code class="language-cpp">// Adresse.cpp
#include &quot;adresse.h&quot;

using namespace std;

Adresse::Adresse(
    string const &amp; name,      // 1. Hasse ich grundsätzlich Abkürzungen im Code
    string const &amp; vorname,   // 2. Sollten Objekte in der Regel per const &amp; 
    string const &amp; telefonnr) //    übergeben werden, wenn keine Änderung/Kopie nötig
:   name(name),               // 3. Initialisierung ist der nachträglichen Zuweisung
    vorname(vorname),         //    vorzuziehen. Dazu dient die Initialisierungsliste
    telefonnr(telefonnr)      //    des Konstruktors
{
}

ostream&amp; operator&lt;&lt;(
    ostream &amp; stream,
    Adresse const &amp; adresse) // Die Adresse wird nicht Manipuliert =&gt; const &amp;
{
    stream &lt;&lt; adresse.name &lt;&lt; &quot; &quot;
           &lt;&lt; adresse.vorname &lt;&lt;&quot; &quot;
           &lt;&lt; adresse.telefonnr;
    return stream;
}

istream&amp; operator&gt;&gt;(
    istream &amp; stream,
    Adresse &amp; adresse)
{
    // cout hat hier nichts zu suchen, dies ist ein Eingabestream, das kann
    // auch eine Datei sein. Dort macht eine Ausgabe keinen Sinn. Dann lieber
    // in dem Fall eine separate Funktion. Und diese möglichst nicht in der
    // Adresse (Logische Trennung von Programmlogik und UI für bessere Wartbarkeit).
    // Zudem bitte nicht mehrere Befehle in eine Zeile quetschen.
    stream &gt;&gt; adresse.name;
    stream &gt;&gt; adresse.vorname;
    stream &gt;&gt; adresse.telefonnr;
    return stream;
}

std::string Adresse::GetName() const
{
    return name;
}

std::string Adresse::GetVorname() const
{
    return vorname;
}

std::string Adresse::GetTelefonNr() const
{
    return telefonnr;
}

void Adresse::SetName(
    std::string const &amp; name)
{
    this-&gt;name = name;
}

void Adresse::SetVorname(
    std::string const &amp; vorname)
{
    this-&gt;vorname = vorname;
}

void Adresse::SetTelefonnr(
    std::string const &amp; telefonnr)
{
    this-&gt;telefonnr = telefonnr;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1673768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673768</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 03 Mar 2009 22:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Tue, 03 Mar 2009 22:12:57 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>Jetzt habe ich ein anderes Problem...<br />
Der Borland Builder bringt mir eine stack overflow fehlermeldung bei öfterem starten des programms.</p>
<p>Ich zeige euch jetzt mal den kompletten code, bitte nicht lachen, etwas anfängerstyle hat er.</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;adressliste.h&quot;
using namespace std;

int main()
{   Adressliste mylist;
    //mylist.loadfromfile(); //dateinamen angeben!?
    mylist.eingabe(); //für sowas hast du doch extra operatoren überladen (&gt;&gt; und &lt;&lt;)
    mylist.eingabe(); //   ---- &quot; -----
    mylist.ausgabe(); //   ---- &quot; -----
    mylist.savetofile(); //dateinamen angeben?!
    system(&quot;PAUSE&quot;); //schlechte variante die konsole offen zu lassen... siehe dazu auch Consolen-FAQ
    return 0; //unnötig
}
</code></pre>
<p>adresse.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt; //solltest du im header schon haben
#include &lt;iostream&gt; // ----- &quot; ----
#include &lt;iomanip&gt; //verwendest du nie
#include &quot;adresse.h&quot;

using namespace std;

Adresse::Adresse(string n, string v, string t) //größere datentypen übergibt man in der Regel nicht per Value(Kopie) sondern per const Referenz (const string &amp;n)
//initialisierungsliste nutzen! :
 : name (n), vorname (v), telefonnr (t)
{/*  name= n;
   vorname= v;
   telefonnr= t;
ist damit unnötig*/
}

#if 0 //zum ausklammern des codes hab ich hier mal den Präprozessor genutzt - wollte es nicht ganz löschen
ostream&amp; operator&lt;&lt;(ostream&amp; o, Adresse&amp; T) //T ist zwar nicht gerade nen toller name dafür, aber das eigtl Problem ist, dass du hier eine Referenz nimmst und keine const Referenz - somit kann man kein const Objekt ausgeben
#endif
ostream&amp; operator &lt;&lt; (ostream &amp;o, const Adresse &amp;T)
{   return o&lt;&lt;T.name&lt;&lt;&quot; &quot;&lt;&lt;T.vorname&lt;&lt;&quot; &quot;&lt;&lt;T.telefonnr&lt;&lt;endl;}

istream&amp; operator&gt;&gt;(istream&amp; i, Adresse&amp; T)
{//üblicherweise sind Ein- und Ausgabe unabhängig von cout / cin zu implementieren! also:
    /*cout&lt;&lt;&quot;Name: &quot;;*/ i &gt;&gt; T.name; 
    /*cout&lt;&lt;&quot;Vorname: &quot;;*/ i&gt;&gt;T.vorname;
    /*cout&lt;&lt;&quot;Telfonnummer: &quot;;*/ i&gt;&gt;T.telefonnr;
    return i;
}
</code></pre>
<p>adresse.h</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
//using namespace std;
/*wurde glaube ich schon erwähnt, dass man das nicht tut...*/

#ifndef ADRESSE_H_INCLUDED
#define ADRESSE_H_INCLUDED
//das hattest du vergessen, das #endif hattest du aber - hab mir die fehlermeldung zwar net durchgelesen, aber das wird sie gewesen sein ^^

class Adresse
{     protected: //ich würde private nehmen
      string name, vorname, telefonnr;
      public:
             Adresse(const std::string &amp;n=&quot;&quot;, const std::string &amp;v=&quot;&quot;, const std::string &amp;t=&quot;&quot;); //übergaben per const referenz und namensraum mit angebgen
             friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; o, const Adresse&amp; T); //namensraum + ref als const gemarkt
             friend std::istream&amp; operator&gt;&gt;(std::istream&amp; i, Adresse&amp; T);
/*Getter + Setter fehlen, z.Bsp.:*/
             const std::string&amp; GetName() const //die funktion ändert das objekt nicht, deshalb das const nach der Parameterliste (die in dem Fall leer ist)
                 { return name; }
             void SetName(const std::string &amp;_name)
                 { name = _name; }
}; //namensraum
#endif //#ifndef ADRESSE_H_INCLUDED
</code></pre>
<p>adressliste.cpp</p>
<pre><code class="language-cpp">#include &quot;adressliste.h&quot;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;fstream&gt;
using namespace std;

fstream f; //schlechte angewohnheit, globale Variable zu nutzen - und eigtl auch immer vermeidbar

#if 0 /* für so etwas gibt es operatoren &gt;&gt; und &lt;&lt; - und dann machst du eben nur ne Funktion Add(const Adresse &amp;value)*/
void Adressliste::eingabe()
{
   Adresse tmp;
   cin&gt;&gt;tmp;
   liste.push_back(tmp);
}

void console(Adresse&amp; T)
{
  cout&lt;&lt;T;
}

void Adressliste::ausgabe()
{
  for_each(liste.begin(), liste.end(), console);
}

void elementspeichern(Adresse &amp;tmp)
{  f&lt;&lt;tmp;
   }

void Adressliste::savetofile()
{  f.open(&quot;datei.txt&quot;, ios::out);
   if(!f)cout&lt;&lt;&quot;Fehler beim Oeffnen der Datei \&quot;datei.txt\&quot;!&quot;;
   else
   { for_each(liste.begin(), liste.end(), elementspeichern);
     f.close();
     }
   }

void Adressliste::loadfromfile()
{  Adresse tmp;
   f.open(&quot;datei.txt&quot;, ios::in);
   if(!f)cout&lt;&lt;&quot;Fehler beim Oeffnen der Datei \&quot;datei.txt\&quot;!&quot;;
   else
   { f&gt;&gt;tmp;
     while(!f.eof())
     {  liste.push_back(tmp);
        f&gt;&gt;tmp;
        }
     f.close();
     }
}
#endif
</code></pre>
<p>adressliste.h</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
#ifndef adresslisteH
#define adresslisteH
//---------------------------------------------------------------------------
#include &quot;adresse.h&quot;
#include &lt;list&gt;

class Adressliste:public Adresse //die vererbung ist hier nicht richtig - Adressliste ist keine Adresse sondern beinhaltet nur Adressen -&gt; nur nen Container mit Adresse als template-Parameter als Member, hast du ja aber schon (std::list &lt;Adresse&gt; liste)
{
      private: //ist es zwar per default, aber ich würds trotzdem mit hinschreiben
             list&lt;Adresse&gt; liste;
      public:
             void eingabe();
             void ausgabe();
             void savetofile();
             void loadfromfile();
};
#endif
</code></pre>
</blockquote>
<p>Hoffe, du siehst noch bissl durch und nimmst dir die Zeit, das alles mal durchzulesen und deine Verbesserung hier zu posten - nat. darfst du auch fragen, falls du etwas (noch) nicht verstehst...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673777</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 03 Mar 2009 22:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Wed, 04 Mar 2009 07:25:27 GMT]]></title><description><![CDATA[<p>Ihr macht euch echt sehr viel mühe mir zu helfen, das finde ich einfach klasse und spreche hiermit ein großes lob aus. <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>
<p>Aa ich heute Arbeiten muss und Abends in die Schule geh, werde ich nicht viel Zeit haben den code zu überarbeiten. Werde mich morgen drauf stürzen und poste meine abgewandelte version vom code hier ins Forum, aber die 2 Klassen würde ich schon gerne beibehalten, da dies genau in der Aufgabenstellung so drin steht.</p>
<p>Ich habe mir eure posts genau durchgelsen und hab festgestellt das ich ganz sicher hier noch Verständnisprobleme haben werde:</p>
<pre><code class="language-cpp">// 1. Datei Öffnen 
    std::fstream datei(dateiname.c_str(), std::ios::in); 
    if(datei.bad()) 
        return adressen; 

    // 2. Daten übertragen 
    std::copy( 
        std::istream_iterator&lt;Adresse&gt;(datei),  // Vom Dateibegin... 
        std::istream_iterator&lt;Adresse&gt;(),       // ...bis kein Eintrag mehr existiert 
        std::back_insert_iterator&lt;std::list&lt;Adresse&gt; &gt;(adressen)); // an die Liste hängen
</code></pre>
<pre><code class="language-cpp">dateiname.c_str(),
</code></pre>
<p>Keine ahnung was diese c_str() bringt...</p>
<pre><code class="language-cpp">datei.bad())
</code></pre>
<p>ebenso</p>
<pre><code class="language-cpp">std::copy( 
        std::istream_iterator&lt;Adresse&gt;(datei),  // Vom Dateibegin... 
        std::istream_iterator&lt;Adresse&gt;(),       // ...bis kein Eintrag mehr existiert 
        std::back_insert_iterator&lt;std::list&lt;Adresse&gt; &gt;(adressen)); // an die Liste hängen
</code></pre>
<p>das mus sich wohl einfach mal probieren, aber was der iterator da soll ist mir auch unverständlich, haben doch gar keinen bestimmt...?</p>
<p>der rest ist mir verständlich, zumindest kann ich mir es denken.<br />
Danke euch <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>MfG Gustl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673843</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Wed, 04 Mar 2009 07:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Wed, 04 Mar 2009 07:45:03 GMT]]></title><description><![CDATA[<p>Gustl schrieb:</p>
<blockquote>
<p>...aber die 2 Klassen würde ich schon gerne beibehalten, da dies genau in der Aufgabenstellung so drin steht.</p>
</blockquote>
<p>Dann gehe ich mal davon aus das du die Adressliste selbst (sprich ohne std::list oder vergleichbares) implementieren sollst.</p>
<p>Gustl schrieb:</p>
<blockquote>
<p>Ich habe mir eure posts genau durchgelsen und hab festgestellt das ich ganz sicher hier noch Verständnisprobleme haben werde:</p>
<pre><code class="language-cpp">// 1. Datei Öffnen 
    std::fstream datei(dateiname.c_str(), std::ios::in); 
    if(datei.bad()) 
        return adressen;
</code></pre>
<pre><code class="language-cpp">dateiname.c_str(),
</code></pre>
<p>Keine ahnung was diese c_str() bringt...</p>
<pre><code class="language-cpp">datei.bad())
</code></pre>
<p>ebenso</p>
</blockquote>
<p>std::fstream erwartet als ersten Parameter einen C-String, std::string gibt über die Funktion .c_str() eben einen solchen (konstanten) zurück. Und was die Funktion bad() von fstream angeht, sollte dein Englisch ausreichen um dies zu verstehen.</p>
<p>Im nächsten C++ Standard wird fstream auch std::string als direkten Parameter zulassen.</p>
<p>Gustl schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::copy( 
        std::istream_iterator&lt;Adresse&gt;(datei),  // Vom Dateibegin... 
        std::istream_iterator&lt;Adresse&gt;(),       // ...bis kein Eintrag mehr existiert 
        std::back_insert_iterator&lt;std::list&lt;Adresse&gt; &gt;(adressen)); // an die Liste hängen
</code></pre>
<p>das mus sich wohl einfach mal probieren, aber was der iterator da soll ist mir auch unverständlich, haben doch gar keinen bestimmt...?</p>
</blockquote>
<p>Auch Datenströme haben Iteratoren. Das Konzept der Iteratoren zieht sich durch das gesamte C++, was auch Sinn macht um viele Ähnliche Abläufe zu vereinheitlichen.</p>
<p>Und hier spielt dein &quot;operator&gt;&gt;(istream&amp;, Adresse&amp;&quot; eine wesentliche Hauptrolle. Der std::back_insert_iterator Iteriert über das Listenende mittels &quot;push_back&quot;...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673849</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 04 Mar 2009 07:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Thu, 05 Mar 2009 18:39:07 GMT]]></title><description><![CDATA[<p>So Leute, jetzt bin ich schon sehr verwundert.</p>
<p>Ich habe das ganze Projekt nochmal von neuem begonnen (bzw. wollte), mit Hilfe eurer Hifestellungen.<br />
Aber beim Versuche das Ding zu starten bringt er mir wieder den stack_overflow Fehler...</p>
<p>Gut, ich habe jetzt euer std:: nicht befolgt, aber daran kann es doch wirklich nicht liegen oder?</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &quot;adresse.h&quot;

using namespace std;

int main()
{   Adresse Test(&quot;Rolf&quot;,&quot;Mueller&quot;,&quot;Hintere Pfaffenleite&quot;,&quot;8&quot;,&quot;08991-666&quot;);
    cout&lt;&lt;Test;
    //Test.loadfromfile();
    //Test.eingabe();
    //Test.eingabe();
    //Test.ausgabe();
    //Test.savetofile();
    getchar();
    return 0;
}
</code></pre>
<p>adresse.h</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
#ifndef adresseH
#define adresseH
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

class Adresse
{   string name;
    string vorname;
    string street;
    string hausnr;
    string phone;
    public:
       Adresse(
          string const &amp; name=&quot;&quot;,
          string const &amp; vorname=&quot;&quot;,
          string const &amp; street=&quot;&quot;,
          string const &amp; hausnr=&quot;&quot;,
          string const &amp; phone=&quot;&quot;)
:         name(name),
          vorname(vorname),
          street(street),
          hausnr(hausnr),
          phone(phone)
          {}

       friend ostream&amp; operator&lt;&lt;(ostream&amp; outstream, Adresse &amp; const adresse);
};
//---------------------------------------------------------------------------
#endif
</code></pre>
<p>adresse.cpp</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------
#include &quot;adresse.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

ostream&amp; operator&lt;&lt;(ostream&amp; outstream, Adresse &amp; const adresse)
{   outstream &lt;&lt; adresse.name &lt;&lt; &quot; &quot;
              &lt;&lt; adresse.vorname &lt;&lt; &quot; &quot;
              &lt;&lt; adresse.street &lt;&lt; &quot; &quot;
              &lt;&lt; adresse.hausnr &lt;&lt; &quot; &quot;
              &lt;&lt; adresse.phone;
    return outstream;
}

//---------------------------------------------------------------------------
</code></pre>
<p>Das ist der komplette code...</p>
<p>Bei der .h bringt er mir bei</p>
<pre><code>string const &amp; name=&quot;&quot;,
</code></pre>
<p>ein Warning:<br />
&quot;Cannot create pre-compieled header: initialized data in header&quot;</p>
<p>Benutze Borland Enterprise Suite Version 6.0 von 2002</p>
<p>Woran kanns denn liegen?<br />
MfG Gustl</p>
<p>EDIT: Habe es jetzt auf einen anderen Rechner versucht zu starten, dort konnte ich es ohne Probleme 3-4x aufrufen, dann war wieder schluß(stack overflow) und ich musste den borland wieder über den taskmanager beenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674812</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Thu, 05 Mar 2009 18:39:07 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Thu, 05 Mar 2009 18:55:13 GMT]]></title><description><![CDATA[<p>Hmm. Das Ding ist recht alt. Hast du es schon mal mit etwas aktuellerem versucht? (VC, oder GCC z.B)</p>
<p>Ansonsten sehe ich vom Code her abgesehen von den falsch verwendeten consts nichts.</p>
<p>Die Fehlermeldung sagt dir wahrscheinlich ja, was das Problem bei dir ist. Nimm die Defaultinitialisierung mal raus. Dann sollte es auch funktionieren.</p>
<p>Am std:: liegts sicher nicht. (Es sei denn du hättest ein sehr merkwürdiges und irgendwie reinpassendes Konstrukt, dass dir einen Laufzeitfehler verursacht was bei dir nicht der Fall ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1674830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1674830</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 05 Mar 2009 18:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Fri, 06 Mar 2009 12:21:00 GMT]]></title><description><![CDATA[<p>Habe es jetzt mit visual studio 2005 probiert, und siehe da, kein stack overflow mehr. <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/1675169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675169</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Fri, 06 Mar 2009 12:58:32 GMT]]></title><description><![CDATA[<p>Wenn du in Zukunft Funktionen oder Klassen aus der Standardbibliothek nicht kennst, kannst du sie in einer C++-Referenz deiner Wahl nachschlagen. Ich empfehle <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675223</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 06 Mar 2009 12:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to for_each ausgabe einer klasse on Fri, 06 Mar 2009 13:06:09 GMT]]></title><description><![CDATA[<p>ok, danke.</p>
<p>Aber eine weiter Sache die ich nicht verstehe ist folgendes,</p>
<p>ich habe zwei Klassen (adresse.h &amp; adressliste.h)<br />
in der adressliste habe ich #include &quot;adresse.h&quot; damit ich bei den Eigenschaften list&lt;Adresse&gt; Liste; sagen kann.<br />
In der cpp von adressliste kann ich ja dann ohne include &quot;adresse.h&quot; ein objekt von adresse erzeugen.. ist das normal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675232</guid><dc:creator><![CDATA[Gustl]]></dc:creator><pubDate>Fri, 06 Mar 2009 13:06:09 GMT</pubDate></item></channel></rss>