<?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[Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ?]]></title><description><![CDATA[<p>Hallo zusammen ...</p>
<p>Folgendes Problem: Ich habe ein großes Array (640x480), welches ich auf dem Heap erzeugt habe.<br />
Das Ganze habe ich folgendermaßen realisiert:</p>
<pre><code class="language-cpp">unsigned short (*Array)[480];
Array = new unsigned short [640][480];
</code></pre>
<p>Dieses Array befindet sich im &quot;Hauptprogramm&quot;.<br />
Jetzt soll das Objekt einer Klasse über mehrere Memberfunktionen Änderungen daran vornehmen können. Also würde ich gern die Adresse des Arrays der Memberfunktion übergeben.</p>
<p>Das habe ich mir so vorgestellt:</p>
<pre><code class="language-cpp">void Klasse::Memberfunktion1( unsigned short (*Array)[480] )
{
    MArray=Array;
}
</code></pre>
<p>Wobei MArray dann eine private Membervariable der Klasse wäre.</p>
<pre><code class="language-cpp">private: 
    unsigned short (*MArray)[480]
</code></pre>
<p>Jetzt erhalte ich immer folgende Fehlermeldung:</p>
<blockquote>
<p>error C2664: 'Klasse::Memberfunktion1': Konvertierung des Parameters 1 von 'unsigned short (*)[480]' in 'unsigned short *[]' nicht möglich 1&gt;Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.</p>
</blockquote>
<p>Was mich etwas wundert, als ich das ganze noch als 1D-Array realisiert hatte lief das ganze nach dem Schema einwandfrei:</p>
<pre><code class="language-cpp">unsigned short *Array;
Array = new unsigned short [640*480];
</code></pre>
<p>Die Arbeit mit den Daten ist allerdings deutlich einfacher, wenn ich das ganze 2D vorliegen habe... <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>Danke schonmal für euere Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/260300/adresse-eines-arrays-vom-heap-an-klasse-memberfunktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 03:26:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260300.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 03 Feb 2010 12:47:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 12:48:25 GMT]]></title><description><![CDATA[<p>Hallo zusammen ...</p>
<p>Folgendes Problem: Ich habe ein großes Array (640x480), welches ich auf dem Heap erzeugt habe.<br />
Das Ganze habe ich folgendermaßen realisiert:</p>
<pre><code class="language-cpp">unsigned short (*Array)[480];
Array = new unsigned short [640][480];
</code></pre>
<p>Dieses Array befindet sich im &quot;Hauptprogramm&quot;.<br />
Jetzt soll das Objekt einer Klasse über mehrere Memberfunktionen Änderungen daran vornehmen können. Also würde ich gern die Adresse des Arrays der Memberfunktion übergeben.</p>
<p>Das habe ich mir so vorgestellt:</p>
<pre><code class="language-cpp">void Klasse::Memberfunktion1( unsigned short (*Array)[480] )
{
    MArray=Array;
}
</code></pre>
<p>Wobei MArray dann eine private Membervariable der Klasse wäre.</p>
<pre><code class="language-cpp">private: 
    unsigned short (*MArray)[480]
</code></pre>
<p>Jetzt erhalte ich immer folgende Fehlermeldung:</p>
<blockquote>
<p>error C2664: 'Klasse::Memberfunktion1': Konvertierung des Parameters 1 von 'unsigned short (*)[480]' in 'unsigned short *[]' nicht möglich 1&gt;Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.</p>
</blockquote>
<p>Was mich etwas wundert, als ich das ganze noch als 1D-Array realisiert hatte lief das ganze nach dem Schema einwandfrei:</p>
<pre><code class="language-cpp">unsigned short *Array;
Array = new unsigned short [640*480];
</code></pre>
<p>Die Arbeit mit den Daten ist allerdings deutlich einfacher, wenn ich das ganze 2D vorliegen habe... <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>Danke schonmal für euere Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1849754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849754</guid><dc:creator><![CDATA[Mandel]]></dc:creator><pubDate>Wed, 03 Feb 2010 12:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 13:24:13 GMT]]></title><description><![CDATA[<p>Ein ähnliches Problem wurde bereits in einem anderen<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1842630.html#1842630" rel="nofollow">Beitrag</a> diskutiert. Vielleicht hilfts dir ja weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849789</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 03 Feb 2010 13:24:13 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 14:51:30 GMT]]></title><description><![CDATA[<p>Nimm halt <code>std::vector</code> .<br />
Und wen du die Grössen zur Kompilierungszeit weisst, dann kannst du auch gleich tr1::array (oder boost::array) benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849869</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 03 Feb 2010 14:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 17:38:38 GMT]]></title><description><![CDATA[<p>Mandel schrieb:</p>
<blockquote>
<blockquote>
<p>error C2664: 'Klasse::Memberfunktion1': Konvertierung des Parameters 1 von 'unsigned short (*)[480]' in 'unsigned short *[]' nicht möglich 1&gt;Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.</p>
</blockquote>
</blockquote>
<p>Im echten Code wurde offenbar das innere Klammernpaar beim Funktionsparameter vergessen oder falsch gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1849982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1849982</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 03 Feb 2010 17:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 21:10:05 GMT]]></title><description><![CDATA[<p>Danke für euere Antworten!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Ich hab eben nochmal geschaut, das innere der Klammern ist schon da... Das ist ja das, was mich irritiert hat.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>: Was hat das Ganze per boost irgend einen Vorteil? Ich lese immer mal wieder von boost....<br />
Wollte das ganze eigentlich erstmal mit den standard Boardmitteln machen. Aber wenn boost:array irgend einen (Geschwindigkeits)Vorteil hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850109</guid><dc:creator><![CDATA[Mandel]]></dc:creator><pubDate>Wed, 03 Feb 2010 21:10:05 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Wed, 03 Feb 2010 23:17:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20117">@Mandel</a>,<br />
Der folgende Code funktioniert einwandfrei und sollte es auch bei dir (sonst liegt es womöglich am Kompiler):</p>
<pre><code class="language-cpp">void foo(int (*arr)[480])
{
}

int main()
{
    int (*arr)[480] = new int[640][480];
    foo(arr);

    delete[] arr;

    return 0;
}
</code></pre>
<p>Wenn der Code auch bei dir funktioniert, dann ist dein Code halt eben doch irgendwo falsch und falsch abgetippt.</p>
<p>drakon hat sich übrigens auf die Lösung von DocShoe bezogen. Rohe Zeiger sind einfach so eine Sache. In C++ kapselt man dies gerne in Klassen, auch um dann RAII zu gewährleisten. <code>boost::array</code> oder <code>std::tr1::array</code> sind Klassen für ein dimensionale Arrays konstanter Grösse. Halte ich persönlich aber nicht für so optimal, da man wegen der Grösse, sie trotzdem auf dem Heap anlegen müsste, wodurch RAII wieder verloren wäre. Ich würde eher zu <code>std::vector</code> raten und einer Kapselung von eben diesem in einer Klasse, wie es DocShoe empfohlen hat. Oder du nimmst statt des <code>std::vector</code> rohe Zeiger in deiner Klasse, was natürlich die Komplexität für dich erhöht, was Kopierbarkeit, Exceptionsicherheit usw. betrifft.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850173</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 03 Feb 2010 23:17:57 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse eines Arrays vom Heap an Klasse&#x2F;Memberfunktion übergeben ? on Thu, 04 Feb 2010 16:04:55 GMT]]></title><description><![CDATA[<p>Mandel schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a>: Was hat das Ganze per boost irgend einen Vorteil? Ich lese immer mal wieder von boost....<br />
Wollte das ganze eigentlich erstmal mit den standard Boardmitteln machen. Aber wenn boost:array irgend einen (Geschwindigkeits)Vorteil hat...</p>
</blockquote>
<p>boost hat den Vorteil, dass man Sachen benutzen kann, welche bereits ausgbiebig getestet worden sind und genau auf gewisse Ansprüche passen. Die Array Variante ist die &quot;sichere&quot; Variante des normalen Arrays, welches aber einige Features mitbringt, wie z.B die natürliche Kopiersemantik, was ein eingebautes Array nicht bietet.</p>
<p>Ein <code>std::vector</code> (welches natürlich bereits Standardmittel ist) bietet genau das, was du machen willst. Ein dynamisch verwaltetes Array. Gegenüber deiner Lösung hat <code>std::vector</code> keinerlei Nachteile (auch nicht Performance mässig, wenn du Release buildest). Du brauchst also für dein Vorhaben gar kein boost.</p>
<p>Du kannst dann, wenn du den einfachen Zugriff haben willst auch das hier machen:</p>
<pre><code class="language-cpp">std::vector&lt; std::vector&lt;int&gt; &gt; MArray ( 640, std::vector&lt;int&gt; ( 480 ) );
</code></pre>
<p>Das kannst du dann auch ganz natürlich kopieren, auch wenn das bei der Grösse natürlich nicht empfehlenswert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1850524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1850524</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 04 Feb 2010 16:04:55 GMT</pubDate></item></channel></rss>