<?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[Membervariable ist private für eine Memberfunktion]]></title><description><![CDATA[<p>Hallo!</p>
<p>Folgendes:</p>
<pre><code class="language-cpp">template &lt;class T&gt; class foo
{
private:
  T val;

public:
  template&lt;class t&gt; foo&lt;T&gt; operator=(foo&lt;t&gt; f)
  {
    val = static_cast&lt;T&gt;(f.val);
    return *this;
  }
};

int main()
{
  foo&lt;int&gt; a;
  foo&lt;float&gt; b;
  a = b;

  return 0;
}
</code></pre>
<p>Wenn ich das kompiliere bekomme ich folgenden Fehler:</p>
<pre><code>test.cpp: In member function ‘foo&lt;T&gt; foo&lt;T&gt;::operator=(foo&lt;t&gt;) [with t = float, T = int]’:
test.cpp:18:   instantiated from here
test.cpp:4: error: ‘float foo&lt;float&gt;::val’ is private
test.cpp:9: error: within this context
</code></pre>
<p>Warum ist hier val für die Memberfunktion private? Wie kann ich die als friend deklarieren?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201113/membervariable-ist-private-für-eine-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 19:42:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201113.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Dec 2007 15:19:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Membervariable ist private für eine Memberfunktion on Mon, 24 Dec 2007 15:19:00 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Folgendes:</p>
<pre><code class="language-cpp">template &lt;class T&gt; class foo
{
private:
  T val;

public:
  template&lt;class t&gt; foo&lt;T&gt; operator=(foo&lt;t&gt; f)
  {
    val = static_cast&lt;T&gt;(f.val);
    return *this;
  }
};

int main()
{
  foo&lt;int&gt; a;
  foo&lt;float&gt; b;
  a = b;

  return 0;
}
</code></pre>
<p>Wenn ich das kompiliere bekomme ich folgenden Fehler:</p>
<pre><code>test.cpp: In member function ‘foo&lt;T&gt; foo&lt;T&gt;::operator=(foo&lt;t&gt;) [with t = float, T = int]’:
test.cpp:18:   instantiated from here
test.cpp:4: error: ‘float foo&lt;float&gt;::val’ is private
test.cpp:9: error: within this context
</code></pre>
<p>Warum ist hier val für die Memberfunktion private? Wie kann ich die als friend deklarieren?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425662</guid><dc:creator><![CDATA[Schablonenmann]]></dc:creator><pubDate>Mon, 24 Dec 2007 15:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariable ist private für eine Memberfunktion on Mon, 24 Dec 2007 15:46:02 GMT]]></title><description><![CDATA[<p>Schablonenmann schrieb:</p>
<blockquote>
<p>Hallo!</p>
<p>Folgendes:</p>
<pre><code class="language-cpp">template &lt;class T&gt; class foo
{
private:
  T val;

public:
  template&lt;class t&gt; foo&lt;T&gt; operator=(foo&lt;t&gt; f)
  {
    val = static_cast&lt;T&gt;(f.val);
    return *this;
  }
};

int main()
{
  foo&lt;int&gt; a;
  foo&lt;float&gt; b;
  a = b;

  return 0;
}
</code></pre>
<p>Wenn ich das kompiliere bekomme ich folgenden Fehler:</p>
<pre><code>test.cpp: In member function ‘foo&lt;T&gt; foo&lt;T&gt;::operator=(foo&lt;t&gt;) [with t = float, T = int]’:
test.cpp:18:   instantiated from here
test.cpp:4: error: ‘float foo&lt;float&gt;::val’ is private
test.cpp:9: error: within this context
</code></pre>
<p>Warum ist hier val für die Memberfunktion private? Wie kann ich die als friend deklarieren?</p>
<p>MfG</p>
</blockquote>
<p>foo&lt;T&gt; hat mit foo&lt;t&gt; nichts zu tun, wenn t != T - es sind dann zwei unabhängige Klassen wie irgendein Foo und Bar, die untereinander Zugriffskontrollen unterliegen. Eine Möglichkeit ist, jede Instanz von foo als friend jeder anderen Instanz von foo zu deklarieren:</p>
<pre><code class="language-cpp">template &lt;class T&gt; class foo
{
    template&lt;typename&gt; friend class foo;
...
</code></pre>
<p>Generell ist es aber besser, ein geeignetes öffentliches Interface bereitzustellen - auf irgendeine Weise muss der Wert val ja sowieso Bestandteil des Interfaces sein, wenn die Klasse einem Zweck dienen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425669</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 24 Dec 2007 15:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariable ist private für eine Memberfunktion on Mon, 24 Dec 2007 15:57:45 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
<p>camper schrieb:</p>
<blockquote>
<p>Generell ist es aber besser, ein geeignetes öffentliches Interface bereitzustellen - auf irgendeine Weise muss der Wert val ja sowieso Bestandteil des Interfaces sein, wenn die Klasse einem Zweck dienen soll.</p>
</blockquote>
<p>Mein obiges Beispiel war nur ein Minimal-Beispiel, bei dem der Fehler noch auftritt. Die eigentliche Klasse ist um einiges komplexer und hat auch ein sinnvolles Interface. Allerdings kein getval() od.ä., da der Benutzer nicht direkt auf val zugreifen soll. Abhängig von der Umgebung muss erst etwas umgerechnet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425673</guid><dc:creator><![CDATA[Schablonenmann]]></dc:creator><pubDate>Mon, 24 Dec 2007 15:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Membervariable ist private für eine Memberfunktion on Tue, 25 Dec 2007 10:47:51 GMT]]></title><description><![CDATA[<p>Außerdem solltest du den Parameter als konstante Referenz übergeben:</p>
<pre><code class="language-cpp">template&lt;class t&gt; foo&lt;T&gt; operator=(const foo&lt;t&gt; &amp;f)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1425843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425843</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 25 Dec 2007 10:47:51 GMT</pubDate></item></channel></rss>