<?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[friend klappt nicht]]></title><description><![CDATA[<p>Hallo, ich habe eine Klasse mit diesem Aufbau:</p>
<pre><code class="language-cpp">// HWBuffer.cpp
class HWBuffer : public Buffer, public Resource {
private:

   friend class HWResourceManager;

   HWBuffer (ResourceManager* creator);
   ~HWBuffer ();

   virtual bool init();

public:
 ...
};
</code></pre>
<p>Wenn ich jetzt aber in HWResourceManager::createHWBuffer() versuche einen HWBuffer mit new zu erzeugen, dann kriege ich diese Compiler Fehler:</p>
<blockquote>
<p>d:\microsoft visual studio 10.0\vc\include\memory(1664): error C2248: 'HWBuffer::~HWBuffer' : cannot access private member declared in class HWBuffer'<br />
1&gt; hwbuffer.h(57) : compiler has generated 'hwbuffer::~hwbuffer' here<br />
1&gt; hwbuffer.h(24) : see declaration of hwbuffer'<br />
1&gt; d:\microsoft visual studio 10.0\vc\include\memory(1431) : see reference to function template instantiation 'void std::tr1::shared_ptr&lt;_Ty&gt;::_Resetp&lt;_Ux&gt;(_Ux *)' being compiled<br />
1&gt; with</p>
</blockquote>
<p>Ich raffs nicht. Wieso geht das nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291249/friend-klappt-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 19:39:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291249.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 13 Aug 2011 18:19:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend klappt nicht on Sat, 13 Aug 2011 18:19:17 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Klasse mit diesem Aufbau:</p>
<pre><code class="language-cpp">// HWBuffer.cpp
class HWBuffer : public Buffer, public Resource {
private:

   friend class HWResourceManager;

   HWBuffer (ResourceManager* creator);
   ~HWBuffer ();

   virtual bool init();

public:
 ...
};
</code></pre>
<p>Wenn ich jetzt aber in HWResourceManager::createHWBuffer() versuche einen HWBuffer mit new zu erzeugen, dann kriege ich diese Compiler Fehler:</p>
<blockquote>
<p>d:\microsoft visual studio 10.0\vc\include\memory(1664): error C2248: 'HWBuffer::~HWBuffer' : cannot access private member declared in class HWBuffer'<br />
1&gt; hwbuffer.h(57) : compiler has generated 'hwbuffer::~hwbuffer' here<br />
1&gt; hwbuffer.h(24) : see declaration of hwbuffer'<br />
1&gt; d:\microsoft visual studio 10.0\vc\include\memory(1431) : see reference to function template instantiation 'void std::tr1::shared_ptr&lt;_Ty&gt;::_Resetp&lt;_Ux&gt;(_Ux *)' being compiled<br />
1&gt; with</p>
</blockquote>
<p>Ich raffs nicht. Wieso geht das nicht? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105763</guid><dc:creator><![CDATA[Kittor]]></dc:creator><pubDate>Sat, 13 Aug 2011 18:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to friend klappt nicht on Sat, 13 Aug 2011 18:23:01 GMT]]></title><description><![CDATA[<p>Anmerkung: Der HWResourceManager hält eine map&lt;string, shared_ptr&lt;HWBuffer&gt;&gt; als member. Könnte das der Grund sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105764</guid><dc:creator><![CDATA[Kittor]]></dc:creator><pubDate>Sat, 13 Aug 2011 18:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to friend klappt nicht on Sat, 13 Aug 2011 18:33:01 GMT]]></title><description><![CDATA[<p>Kittor schrieb:</p>
<blockquote>
<p>Anmerkung: Der HWResourceManager hält eine map&lt;string, shared_ptr&lt;HWBuffer&gt;&gt; als member. Könnte das der Grund sein?</p>
</blockquote>
<p>Ja, das ist der Grund. Der shared_ptr&lt;..&gt; ruft nämlich den Destruktor auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105771</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 13 Aug 2011 18:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to friend klappt nicht on Sat, 13 Aug 2011 18:34:09 GMT]]></title><description><![CDATA[<p>jopp, du musst den shared_ptr zum friend machen.</p>
<p>smart pointer sind dafür da, deine Zeiger automatisch irgendwann freizugeben.<br />
Das geht aber nur, wenn der smart pointer auch den Destruktor aufrufen kann.</p>
<p>Das geht bei dir nicht, da dieser private ist.</p>
<p>Alternativ könntest du also auch den Destruktor public machen.<br />
Ich wüsste sowieso nicht, wieso der private sein sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105772</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sat, 13 Aug 2011 18:34:09 GMT</pubDate></item></channel></rss>