<?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[multidimensionales Array von Klassen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich möchte ein mehrdimensionales Array einer Klasse erstellen. Dafür benutze ich für den 1D Fall folgenden Code (Die Klasse und größe des Arrays ist der einfachheit halber festgelegt):</p>
<pre><code>class anyClass {
public:
  int x[9876];
};

void initArray1D(anyClass **blub)
{

  blub = new anyClass*[10];

  for (int i=0;i&lt;10;i++)
    blub[i] = new anyClass;

}

int main(void)
{

  anyClass **blub;

  // why does this fail ...
    initArray1D(blub);

  // while this works?
//   blub = new anyClass*[10];
//   for (int i=0;i&lt;10;i++)
//     blub[i] = new anyClass;

  blub[3]-&gt;x[17] = 5;
  cout &lt;&lt; blub[3]-&gt;x[18] &lt;&lt; endl;

  return 0;

}
</code></pre>
<p>Allerdings führt der selbe Code einmal direkt ausgeführt und einmal als Funktion (initArray1D) zu unterschiedlichen Ergebnissen (als Funktion crasht es).<br />
Kann mir jemand sagen warum und wo mein Denkfehler ist?</p>
<p>Schonmal vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321689/multidimensionales-array-von-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 06:04:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321689.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Nov 2013 09:57:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 09:57:32 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich möchte ein mehrdimensionales Array einer Klasse erstellen. Dafür benutze ich für den 1D Fall folgenden Code (Die Klasse und größe des Arrays ist der einfachheit halber festgelegt):</p>
<pre><code>class anyClass {
public:
  int x[9876];
};

void initArray1D(anyClass **blub)
{

  blub = new anyClass*[10];

  for (int i=0;i&lt;10;i++)
    blub[i] = new anyClass;

}

int main(void)
{

  anyClass **blub;

  // why does this fail ...
    initArray1D(blub);

  // while this works?
//   blub = new anyClass*[10];
//   for (int i=0;i&lt;10;i++)
//     blub[i] = new anyClass;

  blub[3]-&gt;x[17] = 5;
  cout &lt;&lt; blub[3]-&gt;x[18] &lt;&lt; endl;

  return 0;

}
</code></pre>
<p>Allerdings führt der selbe Code einmal direkt ausgeführt und einmal als Funktion (initArray1D) zu unterschiedlichen Ergebnissen (als Funktion crasht es).<br />
Kann mir jemand sagen warum und wo mein Denkfehler ist?</p>
<p>Schonmal vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366745</guid><dc:creator><![CDATA[gnasen]]></dc:creator><pubDate>Thu, 21 Nov 2013 09:57:32 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:00:32 GMT]]></title><description><![CDATA[<p>Stichwort: Call-By-Value vs. Call-By-Reference</p>
<p>Du manipulierst eine Kopie von anyClass **blub innerhalb der Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366747</guid><dc:creator><![CDATA[qweasdyxc]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:00:32 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:04:22 GMT]]></title><description><![CDATA[<p>du machst es dir viel zu kompliziert.</p>
<ol>
<li></li>
</ol>
<p>einen pointer von einen pointer nutzt man nicht.<br />
arbeite mit einem return Wert.</p>
<p>anyClass* initArray1D( void )<br />
{</p>
<p>return new(std::nothrow)anyClass;</p>
<p>}</p>
<p>und ich habe noch nie einen Array aus Pointern genutzt. Das führt nur zu undefiniertem verhalten wenn jemand deinen Code weiter verwendet.</p>
<p>std::vector&lt;anyClass*&gt; vVector;<br />
vVector.push_back( initARray1D() );<br />
vVector.push_back( initARray1D() );<br />
vVector.push_back( initARray1D() );<br />
vVector.push_back( initARray1D() );<br />
vVector.push_back( initARray1D() );</p>
<p>und irgendwann dann den Inhalt löschen bevor der Scope vom Vector zuende ist. Auch das würde ich nicht machen wollen weil es zu unsicher ist ( was die weitere Verwendung angeht ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366750</guid><dc:creator><![CDATA[ichhoffeesistrichtig]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:04:28 GMT]]></title><description><![CDATA[<p>machs also so:</p>
<pre><code>void initArray1D(anyClass&amp; **blub)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2366751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366751</guid><dc:creator><![CDATA[qwertzui]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:06:25 GMT]]></title><description><![CDATA[<p>@ichhoffeesistrichtig</p>
<p>nein. entweder macht man es komplett &quot;richtig&quot; und verzichtet auf manuelle speicherverwaltung, oder man lässt den OP die grundlagen austüfteln und erfahrung im 2-3-sterne-programmieren machen.<br />
diese halbgare zwischenlösung von dir hilft niemandem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366753</guid><dc:creator><![CDATA[qwertzui]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:12:48 GMT]]></title><description><![CDATA[<p>qweasdyxc schrieb:</p>
<blockquote>
<p>Stichwort: Call-By-Value vs. Call-By-Reference</p>
<p>Du manipulierst eine Kopie von anyClass **blub innerhalb der Funktion.</p>
</blockquote>
<p>Das verstehe ich noch nicht ganz, könntest du ein Beispiel geben wie es richtig wäre?</p>
<p>Was ich letztendlich will ist das folgende:<br />
Mehrdimensionale Arrays einer bestimmten Klasse (anyClass) die man wie jedes &quot;normale&quot; array auch nutzen kann.<br />
In allen Sprachen die ich bisher benutzt habe war dies trivial, in c scheint dies allerdings nicht so einfach zu sein...</p>
<p>Ein Beispiel würde mir schon viel helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366754</guid><dc:creator><![CDATA[gnasen]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:22:01 GMT]]></title><description><![CDATA[<p>Mehrdimensionale Arrays einer bestimmten Klasse (anyClass) die man wie jedes &quot;normale&quot; array auch nutzen kann.<br />
In allen Sprachen die ich bisher benutzt habe war dies trivial, in c scheint dies allerdings nicht so einfach zu sein...</p>
<pre><code>class CInformations
{
double dValue;
}

Funktion()
{

// anlegen
CInformations cInformations[100][100][100];
// zugriff
double dValue = cInformations[0][0][0].dValue;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2366757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366757</guid><dc:creator><![CDATA[ichhoffeesistrichtig]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:23:28 GMT]]></title><description><![CDATA[<p>1D Fall:</p>
<pre><code>vector&lt;anyClass&gt; vec

for( size_t i=0; i&lt;10; ++i)
{
    vec.emplace_back(anyClass());
}

// Zugriff
anyClass&amp; myVec = vec[2];
</code></pre>
<p>2D Fall (eine 2D Matrix von anyClass Objekten)</p>
<pre><code>size_t rows = 4711;
size_t columns = 42;

for( size_t r=0; r&lt;10; ++r)
{
    for( size_t c=0; c&lt;columns; ++c)
    {
        vec.emplace_back(anyClass());
    }
}
// Zugriff
anyClass&amp; myVec = vec[2][3]; // row, column
</code></pre>
<p>Wenn die Groessen statisch bekannt sind, kannst Du statt <code>std::vector&lt;&gt;</code> auch <code>std::array&lt;&gt;</code> nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366759</guid><dc:creator><![CDATA[NutzeDieStandardbibliothe]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 10:43:56 GMT]]></title><description><![CDATA[<p>ichhoffeesistrichtig schrieb:</p>
<blockquote>
<p>Mehrdimensionale Arrays einer bestimmten Klasse (anyClass) die man wie jedes &quot;normale&quot; array auch nutzen kann.<br />
In allen Sprachen die ich bisher benutzt habe war dies trivial, in c scheint dies allerdings nicht so einfach zu sein...</p>
<pre><code>class CInformations
{
double dValue;
}

Funktion()
{

// anlegen
CInformations cInformations[100][100][100];
// zugriff
double dValue = cInformations[0][0][0].dValue;
}
</code></pre>
</blockquote>
<p>Sorry ich habe vergessen zu erwähnen, aber die größe des Arrays ist erst zur Laufzeit bekannt. Es muss also ersteinmal leer definiert werden, bevor es später befüllt wird. Deswegen der Ansatz mit den Poinern.</p>
<p>Die Vector Klasse habe ich jetzt schon öfters mal gesehen, finde die Syntax aber um ehrlich zu sein ziemlich überladen und unübersichtlich. Ich meine das Problem selbst ist doch so einfach, dafür muss es doch auch eine schicke Lösung geben <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="🙂"
    /><br />
Ich bin überhaupt nicht fit in c++, aber warum geht sowas nicht:</p>
<pre><code>anyClass **blub;
blub = new anyClass[x][y];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2366765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366765</guid><dc:creator><![CDATA[gnasen]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:43:56 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 13:07:24 GMT]]></title><description><![CDATA[<p>Es steht doch oben wie Du Dein Problem lösen kannst. Übergib den Zeiger per Referenz an die Funktion</p>
<p>qwertzui schrieb:</p>
<blockquote>
<p>machs also so:</p>
<pre><code>void initArray1D(anyClass&amp; **blub)
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2366794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366794</guid><dc:creator><![CDATA[qwertzui]]></dc:creator><pubDate>Thu, 21 Nov 2013 13:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to multidimensionales Array von Klassen on Thu, 21 Nov 2013 13:08:39 GMT]]></title><description><![CDATA[<p>Andersrum sorry <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>
<pre><code>void initArray1D(anyClass** &amp;blub)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2366795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366795</guid><dc:creator><![CDATA[qwertzui]]></dc:creator><pubDate>Thu, 21 Nov 2013 13:08:39 GMT</pubDate></item></channel></rss>