<?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[Freunde]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>2 Klassen.<br />
Die eine ist mit einer Elementfunktion der anderen befreundet.<br />
Die Elementfunktion der einen, soll die private Variable der anderen ändern:</p>
<pre><code>#include &lt;iostream&gt; 
class B
{
   public:
      void change_x(int);       
};
class A
{
   friend void B::change_x(int);
   private:
      int x;
};
void B::change_x(int y)
{
   A::x = y;
}
int main(void)
{
   B foo;
   A foo2;
   B.change_x(3);   
}
</code></pre>
<p>Dummerweise lässt sich dieser Code nicht kompilieren.<br />
Zeile 11 meldet den Fehler:</p>
<pre><code>11 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\Test\zweiundvierzig.cpp object missing in reference to `A::x'
</code></pre>
<p>In meinem Buch wird das Problem auf ne komische Art und Weise gelöst:</p>
<p>1 Befreundete Klasse: Window_Mgr<br />
2 Klasse: Screen</p>
<p>...</p>
<pre><code>friend Window_Mgr&amp;
Window_Mgr::relocate(Window_Mgr::index, 
Window_Mgr::index, 
Screen&amp;)
</code></pre>
<p>...</p>
<p>Ich versteh aber die erste Zeile nich?<br />
Muss immer noch das Objekt mit Adressoperator vorrangestellt werden?<br />
Wo liegt der Fehler?</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200591/freunde</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 01:10:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200591.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Dec 2007 10:00:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Freunde on Mon, 17 Dec 2007 10:06:29 GMT]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>2 Klassen.<br />
Die eine ist mit einer Elementfunktion der anderen befreundet.<br />
Die Elementfunktion der einen, soll die private Variable der anderen ändern:</p>
<pre><code>#include &lt;iostream&gt; 
class B
{
   public:
      void change_x(int);       
};
class A
{
   friend void B::change_x(int);
   private:
      int x;
};
void B::change_x(int y)
{
   A::x = y;
}
int main(void)
{
   B foo;
   A foo2;
   B.change_x(3);   
}
</code></pre>
<p>Dummerweise lässt sich dieser Code nicht kompilieren.<br />
Zeile 11 meldet den Fehler:</p>
<pre><code>11 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\Test\zweiundvierzig.cpp object missing in reference to `A::x'
</code></pre>
<p>In meinem Buch wird das Problem auf ne komische Art und Weise gelöst:</p>
<p>1 Befreundete Klasse: Window_Mgr<br />
2 Klasse: Screen</p>
<p>...</p>
<pre><code>friend Window_Mgr&amp;
Window_Mgr::relocate(Window_Mgr::index, 
Window_Mgr::index, 
Screen&amp;)
</code></pre>
<p>...</p>
<p>Ich versteh aber die erste Zeile nich?<br />
Muss immer noch das Objekt mit Adressoperator vorrangestellt werden?<br />
Wo liegt der Fehler?</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421832</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Mon, 17 Dec 2007 10:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Freunde on Mon, 17 Dec 2007 10:05:17 GMT]]></title><description><![CDATA[<p>Der Fehler liegt daran, daß die Freund-Methode auch ein Objekt benötigt, auf dessen private Daten sie zugreifen kann. (woher es dieses Objekt bekommt, ist egal - in deinem Buch wird es als dritter Parameter an die Funktion übergeben)</p>
<p>btw hat dein Problem überhaupt nichts mit friend's zu tun <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="😉"
    /> Du kannst ja auch nicht einfach so etwas schreiben:</p>
<pre><code class="language-cpp">struct data
{
  int x;
};

data::x = 4711;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1421835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421835</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 17 Dec 2007 10:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Freunde on Mon, 17 Dec 2007 10:09:41 GMT]]></title><description><![CDATA[<p>du verwechselst durchgehend klassen mit instanzen.<br />
eine klasse ist nur eine vorlage, eine schablone, von der ausgehend dann unterschiedliche objekte, instanzen, gemacht werden können. die klasse A &quot;besitzt&quot; selbst keinen integer, sie normiert nur, dass jede instanz der klasse A eine integervariable als member enthalten soll.</p>
<p>änderungen kommentiert.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
class A; //deklaration von A, um eine referenz zu ermöglichen

class B
{
   public:
      void change_x(int, A &amp;); //die funktion muss ja wissen, von welcher instanz sie den integer ändern soll.       
};

class A
{
   friend void B::change_x(int);
   private:
      int x;
};

void B::change_x(int y, A &amp;a)
{
   a.x = y; //und zwar von der instanz, die übergeben wird.
}

int main(void)
{
   B foo;
   A foo2;
   //B.change_x(3); - wieder einmal: B ist nur die beschreibung
   //richtig:
   foo.change_x(3, foo2);
}
</code></pre>
<p>oder, falls du tatsächlich eine integervariable für _alle_ instanzen brauchst, deklariere sie &quot;static&quot;. aber ich glaube fast, das willst du nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421836</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 17 Dec 2007 10:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to Freunde on Mon, 17 Dec 2007 10:19:22 GMT]]></title><description><![CDATA[<p>ahh... ja ihr habt recht- da muss natürlich der .-Operator verwendet werden.<br />
Dein Beispiel funktioniert.<br />
Bis das du bei einer Definition den 2. Paramter nicht geändert hast- aber egal^^<br />
Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421844</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Mon, 17 Dec 2007 10:19:22 GMT</pubDate></item></channel></rss>