<?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[Objekt einer Klasse in Klasse verwenden]]></title><description><![CDATA[<p>Ich habe hier zwei Klassen, wobei ich die Funktionen der ersten Klasse in der zweiten benötige.<br />
Wie kann ich das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306566/objekt-einer-klasse-in-klasse-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 11:55:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306566.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2012 12:18:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:18:28 GMT]]></title><description><![CDATA[<p>Ich habe hier zwei Klassen, wobei ich die Funktionen der ersten Klasse in der zweiten benötige.<br />
Wie kann ich das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237591</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:18:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:28:46 GMT]]></title><description><![CDATA[<p>amolacar schrieb:</p>
<blockquote>
<p>Ich habe hier zwei Klassen, wobei ich die Funktionen der ersten Klasse in der zweiten benötige.<br />
Wie kann ich das machen?</p>
</blockquote>
<p>Es gibt viele Möglichkeiten. Die technische Umsetzung sollte sich jedoch an der Modellierung orientieren, niemals umgekehrt. Was sollen deine Klassen darstellen, wie verhalten sich die Klassen und Objektinstanzen zueinander?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237598</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:30:13 GMT]]></title><description><![CDATA[<p>So:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A
{
  int i_;
public:
  A(int i)
    : i_(i)
  {}
  void foo()
  {
    std::cout &lt;&lt; i_ &lt;&lt; '\n';
  }
};

class B
{
  A a_;
public:
  B(int i)
    : a_(i)
  {}
  void foo()
  {
    a_.foo();
  }
};

int main()
{
  B b(5);
  b.foo();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2237599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237599</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:31:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Woher weißt du, dass er Komposition suchte, nicht Vererbung (in einer ihrer vielen Spielarten), Übergabe (in einer ihrer vielen Spielarten) oder sonstwas, das ich gerade vergessen habe (in einer seiner vielen Spielarten)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237601</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:34:12 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Es gibt viele Möglichkeiten. Die technische Umsetzung sollte sich jedoch an der Modellierung orientieren, niemals umgekehrt. Was sollen deine Klassen darstellen, wie verhalten sich die Klassen und Objektinstanzen zueinander?</p>
</blockquote>
<p>Genauer: Ich habe eine Klasse, die die socket-Funktionen der Win-API durch eigene Methoden ersetzt, dazu Fehlerbehandlung etc..<br />
Das hat den Sinn, dass ich in der zweiten Klasse dann zum Beispiel nur noch createSocket() aufrufen muss wenn ich eins erstellen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237605</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:39:13 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Woher weißt du, dass er Komposition suchte, nicht Vererbung (in einer ihrer vielen Spielarten), Übergabe (in einer ihrer vielen Spielarten) oder sonstwas, das ich gerade vergessen habe (in einer seiner vielen Spielarten)?</p>
</blockquote>
<p>Ich hab ihm einfach irgendwas geschrieben damit er einsieht, dass die Informationen nicht reichen. Geht meiner Erfahrung nach schneller als Diskussionen.</p>
<p>amolacar schrieb:</p>
<blockquote>
<p>Genauer: Ich habe eine Klasse, die die socket-Funktionen der Win-API durch eigene Methoden ersetzt, dazu Fehlerbehandlung etc..<br />
Das hat den Sinn, dass ich in der zweiten Klasse dann zum Beispiel nur noch createSocket() aufrufen muss wenn ich eins erstellen will.</p>
</blockquote>
<p>Such mal nach RAII.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237608</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:48:42 GMT]]></title><description><![CDATA[<p>RAII klingt auf jeden Fall interessant, wird hier meiner Meinung nach nicht benötigt.<br />
Um nochmal zurück zu meiner Frage zu kommen:</p>
<p>Wie kann ich diese &quot;socket-Klasse&quot; jetzt in meiner zweiten Klasse nutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237613</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:55:20 GMT]]></title><description><![CDATA[<p>amolacar schrieb:</p>
<blockquote>
<p>RAII klingt auf jeden Fall interessant, wird hier meiner Meinung nach nicht benötigt.</p>
</blockquote>
<p>Nur auf die Art und Weise, wie ein Flugzeug nicht &quot;nötig&quot; ist, um von London nach New York zu kommen. Es mag auch ohne gehen, ist dann aber unnötig langsam und umständlich. Guck dir das unbedingt nochmal an. Das ist eine wichtige Grundtechnik!</p>
<blockquote>
<p>Wie kann ich diese &quot;socket-Klasse&quot; jetzt in meiner zweiten Klasse nutzen?</p>
</blockquote>
<p>Die Frage erübrigt sich, wenn die Klassen ihre Ressourcen selber verwalten, siehe oben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237619</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 12:53:41 GMT]]></title><description><![CDATA[<p>wie meine voredner schon sagten: was hast du genau vor?</p>
<p>(Used sei im foglenden die zu nutzende Klasse, User die nutzende Klasse):<br />
1.- du kannst User von Used erben lassen um die funktionalität zu nutzen</p>
<pre><code class="language-cpp">class Used { };
class User : public/private/protected Used {};
</code></pre>
<p>2.- du kannst Used in User reinkomponieren</p>
<pre><code class="language-cpp">class Used { };
class User { Used m_used; };
</code></pre>
<p>3.- du kannst dir innerhalb von methoden lokal ein Used objekt erstellen und dieses dann nutzen</p>
<pre><code class="language-cpp">class Used { };
class User
{
    void foo()
    {
        Used u;
    }
};
</code></pre>
<p>das sind 3 grundlegende möglichkeiten, es geht noch mehr, aber rück erstmal infos raus <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/2237620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237620</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 01 Aug 2012 12:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 14:41:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25760">@cooky451</a>: Woher weißt du, dass er Komposition suchte, nicht Vererbung?</p>
</blockquote>
<p>Aus dem Titel zu entnehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237669</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Wed, 01 Aug 2012 14:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 15:36:29 GMT]]></title><description><![CDATA[<p>Aber er kann auch eine noch schwächere Bindung gebrauchen:</p>
<pre><code class="language-cpp">class A
{
public:
    void foo();
};

class B
{
public:
    B() : a(nullptr) {}
    void SetA(A&amp; a) {this-&gt;a = &amp;a;}
    void func() {a-&gt;foo();}

private:
    A* a;
};
</code></pre>
<p>oder sogar</p>
<pre><code class="language-cpp">class A
{
public:
    void foo();
};

class B
{
public:
    void someFunc(A&amp; a) {a.foo();}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2237689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237689</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 01 Aug 2012 15:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 15:30:04 GMT]]></title><description><![CDATA[<p>Müsste es nicht so heißten:<br />
[cpp]void SetA(A***** a) {this-&gt;a = a;} [/cpp]</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237693</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Wed, 01 Aug 2012 15:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 15:35:45 GMT]]></title><description><![CDATA[<p>jain, er kann einen zeiger als parameter argument erwarten oder eine referenz, aber im falle der referenz (wie ers gemacht hat) muss er dann seiner membervaraible die addresse geben:</p>
<pre><code class="language-cpp">class A
{
public:
    void foo();
};

class B
{
public:
    B() : a(nullptr) {}
    void SetA(A&amp; a) {this-&gt;a = &amp;a;} // &lt;----
    void SetA(A * a) {this-&gt;a = a;};
    void func() {a-&gt;foo();}

private:
    A* a;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2237695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237695</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 01 Aug 2012 15:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 15:38:46 GMT]]></title><description><![CDATA[<p>Das war eigentlich eine Übung an den TE, aber da ihr es jetzt schon aufgelöst habt, hab ich es ebenfalls korrigiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>yihaaa: Das ist eine semantische Frage. Ich finde die Referenzübergabe sinnvoller, weil ich meistens bei Dependency Injection nicht im Nachhinein einen Zeiger ungültig machen möchte. Soll man das nicht können, dann ist die Referenz zur Indikation dessen angebrachter, wie ich finde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237696</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 01 Aug 2012 15:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 18:33:35 GMT]]></title><description><![CDATA[<p>Ja die Übergabe per Referenz ist natürlich besser, da sie weniger Fehleranfällig ist als die mit Pointer. Wie schnell hat man mal das dereferenzieren vergessen...<br />
Sorry, das wir deine Übung versaut haben <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237747</guid><dc:creator><![CDATA[yihaaa]]></dc:creator><pubDate>Wed, 01 Aug 2012 18:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Wed, 01 Aug 2012 22:17:26 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die tolle und kompetente Hilfe.<br />
Ich habe mir das mit der RAII nochmal genauer angeguckt und wollte hier nochmal erläutern wie ich das verstehe:</p>
<p>Wenn ich von meiner Socket-Klasse ausgehe erstelle ich mit jedem Objekt einen Socket, diesen kann ich dann mit Methoden verändern (an einen Port binden etc.) und durch den Destruktor in dem ich den Socket wieder freigebe wird automatisch, wenn ich z.B. ein Socket-Objekt in einer Methode in der Klasse in der ich die Socket-Klasse verwenden möchte erzeuge, dieses Objekt freigegeben, da mit dem verlassen der Funktion auch alle Variablen und Objekte zerstört werden?</p>
<p>Ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237778</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Wed, 01 Aug 2012 22:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Thu, 02 Aug 2012 00:10:31 GMT]]></title><description><![CDATA[<p>Genau. Im Konstruktor erstellst du den Socket, und im Destruktor zerstörst du ihn wieder. Dann kannst du das nicht vergessen, und der Code ist Exception sicher. Wie genau man das jetzt modelliert könnte noch eine andere Frage sein, (connection/server/..) aber ich denke das bringt dir hier erstmal nicht genug Vorteile. Hauptsache RAII ist drin. Und vergiss den copy Konstruktor und den Zuweisungsoperator nicht. <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="😉"
    /> (Wohl einfach private machen. Eventuell mal nach C++11 move suchen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2237806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2237806</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 02 Aug 2012 00:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 11:11:29 GMT]]></title><description><![CDATA[<p>Okay es hat sich ein weiteres Problemchen ergeben wo ich nochmal eure Hilfe brauche.</p>
<p>Als privat deklariert:</p>
<pre><code class="language-cpp">SOCKET _sock
</code></pre>
<p>Das ist mein Konstruktor:</p>
<pre><code class="language-cpp">Socket::Socket() : _sock(socket(PF_INET, SOCK_STREAM, 0)) {

	if (_sock == INVALID_SOCKET) {
		throw socketException(&quot;socket() failed&quot;, WSAGetLastError());
	}
}
</code></pre>
<p>Der Destruktor:</p>
<pre><code class="language-cpp">Socket::~Socket() {
	error = closesocket(_sock);
	if (error == SOCKET_ERROR) {
		throw socketException(&quot;closesocket() failed&quot;, WSAGetLastError());
	}
}
</code></pre>
<p>Der Programmcode in dem der Fehler auftritt:</p>
<pre><code class="language-cpp">Socket saccept;
Socket slisten;

slisten.bind(SERVER_PORT, SERVER_ADDRESS);
slisten.listen();

do {
	saccept.accept(slisten);
} while (1);
</code></pre>
<p>Nachdem die erste Verbindung aktzeptiert wurde und der erste Schleifendurchlauf beendet wurde bekomme ich eine Exception geworfen die mir sagt, dass closesocket() fehlgeschlagen ist mit dem Fehlercode 10038.</p>
<p>Kann mir jmd sagen was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238619</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Sat, 04 Aug 2012 11:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 11:33:50 GMT]]></title><description><![CDATA[<p>da ich mich mit sockets nicht auskenne, kann ich nur eine schwere falle aufdecken.</p>
<p>NIEMALS IN DESTRUKTOREN EXCEPTIONS WERFEN !!!</p>
<p>ansonsten kann es passieren, dass objekte (oder arrays/vectoren) nicht komplett zerstört werden (oder im falle von arrays/listen einige nicht destruiert werden)<br />
genaueres in effective c++ nachzulesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238621</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 04 Aug 2012 11:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 11:48:27 GMT]]></title><description><![CDATA[<p>Oha, gut zu wissen, danke.<br />
Trotzdem frage ich mich, wieso nach dem ersten Schleifendurchlauf der Destruktor aufgerufen wird.</p>
<p>Edit: Habe die Exception mal rausgenommen, jetzt wird nachdem die erste Verbindung aktzeptiert wurde gar keine Verbindung mehr angenommen, es wird aber auch keine Exception geworfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238622</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Sat, 04 Aug 2012 11:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 11:57:50 GMT]]></title><description><![CDATA[<p>Zeig doch auch Mal accept.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238628</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 04 Aug 2012 11:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 13:10:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Socket::accept(Socket listen_sock) {	
	_sock = ::accept(listen_sock._sock, NULL, NULL);
}
</code></pre>
<p>Der Fehler tritt aber denke ich bei dem listen-Socket auf, accept() bekommt nämlich kein gültiges Socket mehr übergeben. Nur wieso das so ist und wie man das beheben kann, keine Ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238632</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Sat, 04 Aug 2012 13:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 12:27:59 GMT]]></title><description><![CDATA[<p>Hier sieht man ganz gut, wieso man die Regel der großen drei einhalten sollte. Wenn der Destruktor implementiert wird, sollten auch operator= und copy-ctor überschrieben werden. Wieso? Weil sonst Kopien erstellt werden, die natürlich auch durch RRID wieder zerstört werden. Und dann wird closesocket aufgerufen und alle noch lebenden Kopien der Klasse werden ungültig. Ein Nebeneffekt, der eigentlich fast nie so gewollt ist.</p>
<p>Was hier passiert:<br />
accept wird mit listen_sock aufgerufen. Da Du nicht über Referenz übergibst, sondern by value, wird listen_sock erstellt, indem eine Kopie vom übergebenen Socket erstellt wird (Kopie heißt hier einfach, dass alle Attribute kopiert werden).</p>
<p>Wieso listen_sock jetzt nicht gültig ist, weiß ich aber nicht. Ein Socket definiert sich ja meist intern über eine Handle-ID. Klar ist, dass nach dem Funktionsaufruf der Destruktor aufgerufen wird, sodass das Socket danach zerstört wird. Wenn Du by reference übergibst, wird eben keine Kopie erstellt. Wie macht sich denn bemerkbar, dass das Socket ungültig ist? Du kannst gerne auch Mal listen und bind zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238640</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 04 Aug 2012 12:27:59 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 12:27:55 GMT]]></title><description><![CDATA[<p>amolacar schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void Socket::accept(Socket listen_sock) {	
	_sock = ::accept(listen_sock._sock, NULL, NULL);
}
</code></pre>
</blockquote>
<p>du übergibst eine kopie deines objektes (_sock) und diese kopie wird am ende von der methode zerstört. ich vermute, du hast in deiner socket klasse keine eigenen kopierkonstruktor definiert und der generierte kopiert stupide alles hin und her und sobald hier deine methode verlassen wird, werden quasi beide sockets ungültig gemacht, d.h. der eine wird zerstört und zerstört damit die aufgebaute verbindung des anderen</p>
<p>für mehr als dieses vermutungen müsste man sich code angucken</p>
<p>(versuch einfach mal:</p>
<pre><code class="language-cpp">void Socket::accept(Socket &amp; listen_sock) {	
	_sock = ::accept(listen_sock._sock, NULL, NULL);
}
</code></pre>
<p>nur mal so, ob der fehler dann weg ist. weil dann wäre meine vermutung bestätigt. das design solltest du dann mal überdenken)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238641</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 04 Aug 2012 12:27:55 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 12:52:10 GMT]]></title><description><![CDATA[<p>Ja jetzt klappt alles, danke! <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>Also Kopier-Konstruktor sowas?</p>
<pre><code class="language-cpp">Socket::Socket(const Socket &amp;rhs) {
	_sock = rhs._sock;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2238649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238649</guid><dc:creator><![CDATA[amolacar]]></dc:creator><pubDate>Sat, 04 Aug 2012 12:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt einer Klasse in Klasse verwenden on Sat, 04 Aug 2012 13:04:51 GMT]]></title><description><![CDATA[<p>Wenn du den so bauen willst, hast Du das Problem noch nicht verstanden.</p>
<p>Du kannst copy-ctor und operator= &quot;deaktivieren&quot;, wenn man keine Kopien erstellen sollte. Das ist wohl in Deinem Fall zu empfehlen.</p>
<p>Einfach in die Klasse schreiben:</p>
<pre><code class="language-cpp">private:
Socket(const Socket&amp;);
Socket&amp; operator=(const Socket&amp;);
</code></pre>
<p>ohne Implementierung. Jetzt gehen keine Kopien mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2238653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2238653</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Sat, 04 Aug 2012 13:04:51 GMT</pubDate></item></channel></rss>