<?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[Instanz einer Klasse an eine Funktion übergeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite aktuell ein paar Aufgaben aus einem Buch ab. In dieser Aufgabe soll ich eine Party simulieren, dabei werden Objekte mit dem Namen der Teilnehmer erzeugt, sobald sich zwei kennengelernt haben, sollen die Namen des jeweils anderen unter Bekannte abgespeichert werden. Das klappt alles auch soweit, nur in der Funktion lerntKennen() habe ich Probleme.</p>
<pre><code>void Teilnehmer::lerntKennen(Teilnehmer s) {
    if(name!=s.gibNamen() &amp;&amp; !kennt(s)) {
        bekannte.push_back(s);
        s.lerntKennen(*this);
        //std::cout &lt;&lt; s.gibNamen() &lt;&lt; &quot; &quot; &lt;&lt; this-&gt;gibNamen() &lt;&lt; '\n';
    }
}
</code></pre>
<p>Hier möchte ich, dass die Funktion sich selbst aufruft, allerdings als eine Funktion des Freundes mit dem Parameter des aktuellen Objektes. Leider wird aber der Name nicht in der Bekanntenliste des Freundes abgespeichert.</p>
<p>Hier mal die Quellcodes:</p>
<p>main.cpp</p>
<pre><code>#include &quot;teilnehmer.h&quot;
#include &lt;vector&gt;
#include &lt;iostream&gt;
using namespace std;

int main() {
    Teilnehmer otto(&quot;Otto&quot;);
    Teilnehmer andrea(&quot;Andrea&quot;);
    Teilnehmer jens(&quot;Jens&quot;);
    Teilnehmer silvana(&quot;Silvana&quot;);
    Teilnehmer miriam(&quot;Miriam&quot;);
    Teilnehmer paul(&quot;Paul&quot;);
    vector&lt;Teilnehmer*&gt; alle {&amp;otto, &amp;andrea, &amp;jens, &amp;silvana, &amp;miriam, &amp;paul};
    andrea.lerntKennen(jens);
    silvana.lerntKennen(otto);
    paul.lerntKennen(otto);
    paul.lerntKennen(silvana);
    miriam.lerntKennen(andrea);
    jens.lerntKennen(miriam);
    jens.lerntKennen(silvana);
    if(jens.kennt(andrea)) {
        cout &lt;&lt; &quot;Jens kennt Andrea\n&quot;;
    }
    // Ausgabe aller Teilnehmer mit Angabe, wer wen kennt:
    for(auto teilnehmerPtr : alle) {
        cout &lt;&lt; teilnehmerPtr-&gt;gibNamen() &lt;&lt; &quot; kennt: &quot;;
        teilnehmerPtr-&gt;druckeBekannte();
        cout &lt;&lt; endl;
    }
}
</code></pre>
<p>teilnehmer.cpp</p>
<pre><code>#include &quot;teilnehmer.h&quot;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

Teilnehmer::Teilnehmer(std::string n) {
    name=n;
}

std::string Teilnehmer::gibNamen() {
    return name;
}

void Teilnehmer::druckeBekannte() {
    for(int i=0; i&lt;bekannte.size(); ++i) {
        std::cout &lt;&lt; bekannte[i].gibNamen() &lt;&lt; &quot; &quot;;
    }
}

void Teilnehmer::lerntKennen(Teilnehmer s) {
    if(name!=s.gibNamen() &amp;&amp; !kennt(s)) {
        bekannte.push_back(s);
        s.lerntKennen(*this);
        //std::cout &lt;&lt; s.gibNamen() &lt;&lt; &quot; &quot; &lt;&lt; this-&gt;gibNamen() &lt;&lt; '\n';
    }
}

bool Teilnehmer::kennt(Teilnehmer t) {
    bool vorhanden=0;
    for (int i=0; i&lt;bekannte.size(); ++i) {
        if(bekannte[i].gibNamen()==t.gibNamen()) {
            vorhanden=1;
            break;
        }
    }
    return vorhanden;
}
</code></pre>
<p>teilnehmer.h</p>
<pre><code>#ifndef TEILNEHMER_H
#define TEILNEHMER_H
#include &lt;vector&gt;
#include &lt;string&gt;

class Teilnehmer {
public:
    Teilnehmer(std::string n);
    std::string gibNamen();
    void druckeBekannte();
    void lerntKennen(Teilnehmer s);
    bool kennt(Teilnehmer t);
private:
    std::string name;
    std::vector&lt;Teilnehmer&gt; bekannte;
};

#endif
</code></pre>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337306/instanz-einer-klasse-an-eine-funktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 06:35:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337306.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Mar 2016 11:58:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Instanz einer Klasse an eine Funktion übergeben on Wed, 23 Mar 2016 11:58:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite aktuell ein paar Aufgaben aus einem Buch ab. In dieser Aufgabe soll ich eine Party simulieren, dabei werden Objekte mit dem Namen der Teilnehmer erzeugt, sobald sich zwei kennengelernt haben, sollen die Namen des jeweils anderen unter Bekannte abgespeichert werden. Das klappt alles auch soweit, nur in der Funktion lerntKennen() habe ich Probleme.</p>
<pre><code>void Teilnehmer::lerntKennen(Teilnehmer s) {
    if(name!=s.gibNamen() &amp;&amp; !kennt(s)) {
        bekannte.push_back(s);
        s.lerntKennen(*this);
        //std::cout &lt;&lt; s.gibNamen() &lt;&lt; &quot; &quot; &lt;&lt; this-&gt;gibNamen() &lt;&lt; '\n';
    }
}
</code></pre>
<p>Hier möchte ich, dass die Funktion sich selbst aufruft, allerdings als eine Funktion des Freundes mit dem Parameter des aktuellen Objektes. Leider wird aber der Name nicht in der Bekanntenliste des Freundes abgespeichert.</p>
<p>Hier mal die Quellcodes:</p>
<p>main.cpp</p>
<pre><code>#include &quot;teilnehmer.h&quot;
#include &lt;vector&gt;
#include &lt;iostream&gt;
using namespace std;

int main() {
    Teilnehmer otto(&quot;Otto&quot;);
    Teilnehmer andrea(&quot;Andrea&quot;);
    Teilnehmer jens(&quot;Jens&quot;);
    Teilnehmer silvana(&quot;Silvana&quot;);
    Teilnehmer miriam(&quot;Miriam&quot;);
    Teilnehmer paul(&quot;Paul&quot;);
    vector&lt;Teilnehmer*&gt; alle {&amp;otto, &amp;andrea, &amp;jens, &amp;silvana, &amp;miriam, &amp;paul};
    andrea.lerntKennen(jens);
    silvana.lerntKennen(otto);
    paul.lerntKennen(otto);
    paul.lerntKennen(silvana);
    miriam.lerntKennen(andrea);
    jens.lerntKennen(miriam);
    jens.lerntKennen(silvana);
    if(jens.kennt(andrea)) {
        cout &lt;&lt; &quot;Jens kennt Andrea\n&quot;;
    }
    // Ausgabe aller Teilnehmer mit Angabe, wer wen kennt:
    for(auto teilnehmerPtr : alle) {
        cout &lt;&lt; teilnehmerPtr-&gt;gibNamen() &lt;&lt; &quot; kennt: &quot;;
        teilnehmerPtr-&gt;druckeBekannte();
        cout &lt;&lt; endl;
    }
}
</code></pre>
<p>teilnehmer.cpp</p>
<pre><code>#include &quot;teilnehmer.h&quot;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

Teilnehmer::Teilnehmer(std::string n) {
    name=n;
}

std::string Teilnehmer::gibNamen() {
    return name;
}

void Teilnehmer::druckeBekannte() {
    for(int i=0; i&lt;bekannte.size(); ++i) {
        std::cout &lt;&lt; bekannte[i].gibNamen() &lt;&lt; &quot; &quot;;
    }
}

void Teilnehmer::lerntKennen(Teilnehmer s) {
    if(name!=s.gibNamen() &amp;&amp; !kennt(s)) {
        bekannte.push_back(s);
        s.lerntKennen(*this);
        //std::cout &lt;&lt; s.gibNamen() &lt;&lt; &quot; &quot; &lt;&lt; this-&gt;gibNamen() &lt;&lt; '\n';
    }
}

bool Teilnehmer::kennt(Teilnehmer t) {
    bool vorhanden=0;
    for (int i=0; i&lt;bekannte.size(); ++i) {
        if(bekannte[i].gibNamen()==t.gibNamen()) {
            vorhanden=1;
            break;
        }
    }
    return vorhanden;
}
</code></pre>
<p>teilnehmer.h</p>
<pre><code>#ifndef TEILNEHMER_H
#define TEILNEHMER_H
#include &lt;vector&gt;
#include &lt;string&gt;

class Teilnehmer {
public:
    Teilnehmer(std::string n);
    std::string gibNamen();
    void druckeBekannte();
    void lerntKennen(Teilnehmer s);
    bool kennt(Teilnehmer t);
private:
    std::string name;
    std::vector&lt;Teilnehmer&gt; bekannte;
};

#endif
</code></pre>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2491248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2491248</guid><dc:creator><![CDATA[bruhial]]></dc:creator><pubDate>Wed, 23 Mar 2016 11:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz einer Klasse an eine Funktion übergeben on Wed, 23 Mar 2016 12:05:25 GMT]]></title><description><![CDATA[<p>Du übergibst lerntKennen eine Kopie. Damit veränderst du zwar die Kopie, auf das ursprüngliche Objekt hat das allerdings keinen Einfluss -&gt; Referenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2491250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2491250</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 23 Mar 2016 12:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz einer Klasse an eine Funktion übergeben on Wed, 23 Mar 2016 12:59:20 GMT]]></title><description><![CDATA[<p>Problematisch ist auch, dass du alle Teilnehmer (TN) in einem Vektor als Kopie speicherst (in teilnehmer.h). Denke daran, dass ein Objekt eine Identität hat. Wenn du zwei TN abspeicherst, mögen die gleich sein, sind aber nicht identisch. Es ist nicht sinnvoll, dass jeder TN eine Kopie aller anderen bekannten TN speichert. Deswegen lieber Verweise abspeichern. Oder nur die Namen (mit dem Problem, dass es zwei TN mit demselben Namen geben könnte). Oder du vergibst eine eindeutige Id-Nummer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2491261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2491261</guid><dc:creator><![CDATA[problembaer]]></dc:creator><pubDate>Wed, 23 Mar 2016 12:59:20 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz einer Klasse an eine Funktion übergeben on Wed, 23 Mar 2016 13:04:59 GMT]]></title><description><![CDATA[<p>Hat geklappt, danke!</p>
<pre><code>void Teilnehmer::lerntKennen(Teilnehmer&amp; s) {
    if(name!=s.gibNamen() &amp;&amp; !kennt(s)) {
        bekannte.push_back(s);
        s.lerntKennen(*this);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2491262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2491262</guid><dc:creator><![CDATA[bruhial]]></dc:creator><pubDate>Wed, 23 Mar 2016 13:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz einer Klasse an eine Funktion übergeben on Wed, 23 Mar 2016 13:10:52 GMT]]></title><description><![CDATA[<pre><code>bool vorhanden = 0;
</code></pre>
<p>sieht nicht schön aus. vorhanden=1 auch nicht. Mal true und false probieren!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2491263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2491263</guid><dc:creator><![CDATA[buhl]]></dc:creator><pubDate>Wed, 23 Mar 2016 13:10:52 GMT</pubDate></item></channel></rss>