<?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[Mehrdimensionale Objektstruktur]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine mehrdimensionale objektstruktur aufbauen, habe jedoch das problem, das die zuweisung nicht funktioniert.</p>
<pre><code>class GraphEntry;

class MatrixGraph {

  public:
    /* constructor, destructor, ... */

    void init();
    void addGraphEntry(GraphEntry *entry, int row, int col);

  private:
    GraphEntry **matrix;
    int maxSize = 3;
}

void MatrixGraph::init() 
{
  if (maxSize &gt; 0) {
    matrix = new GraphEntry*[maxSize];
    for (int i = 0; i &lt; maxSize; i++)
      matrix[i] = new GraphEntry[maxSize];
  }
}

void MatrixGraph::addGraphEntry(GraphEntry *entry, int row, int col)
{
  if (row &lt; maxSize &amp;&amp; col &lt; maxSize) {
    matrix[row][col] = entry;
  }
}
</code></pre>
<p>In der methode addGraphEntry möchte ich einen eintrag einer bestimmten position in der matrix zuweisen, jedoch bemängelt der compiler das mit der meldung:</p>
<blockquote>
<p>no match for ‘operator=’ (operand types are ‘GraphEntry’ and ‘GraphEntry*’)</p>
</blockquote>
<p>In der klasse GraphEntry habe ich den zuweisungsoperator überschrieben.</p>
<p>Kann mir jemand sagen, wo ich einen fehler gemacht habe?</p>
<p>Weiters ist mir bewusst, das es stl container gibt, aber ich muss mit arrays arbeiten.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329790/mehrdimensionale-objektstruktur</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 20:56:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329790.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Dec 2014 10:45:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 10:45:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine mehrdimensionale objektstruktur aufbauen, habe jedoch das problem, das die zuweisung nicht funktioniert.</p>
<pre><code>class GraphEntry;

class MatrixGraph {

  public:
    /* constructor, destructor, ... */

    void init();
    void addGraphEntry(GraphEntry *entry, int row, int col);

  private:
    GraphEntry **matrix;
    int maxSize = 3;
}

void MatrixGraph::init() 
{
  if (maxSize &gt; 0) {
    matrix = new GraphEntry*[maxSize];
    for (int i = 0; i &lt; maxSize; i++)
      matrix[i] = new GraphEntry[maxSize];
  }
}

void MatrixGraph::addGraphEntry(GraphEntry *entry, int row, int col)
{
  if (row &lt; maxSize &amp;&amp; col &lt; maxSize) {
    matrix[row][col] = entry;
  }
}
</code></pre>
<p>In der methode addGraphEntry möchte ich einen eintrag einer bestimmten position in der matrix zuweisen, jedoch bemängelt der compiler das mit der meldung:</p>
<blockquote>
<p>no match for ‘operator=’ (operand types are ‘GraphEntry’ and ‘GraphEntry*’)</p>
</blockquote>
<p>In der klasse GraphEntry habe ich den zuweisungsoperator überschrieben.</p>
<p>Kann mir jemand sagen, wo ich einen fehler gemacht habe?</p>
<p>Weiters ist mir bewusst, das es stl container gibt, aber ich muss mit arrays arbeiten.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431746</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 10:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 10:57:15 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung kann doch klarer nicht sein.<br />
Du versuchst einem GraphEntry einen GraphEntry* zuzuweisen.<br />
Du musst den GraphEntry-Zeiger auf der rechten Seite dereferenzieren.</p>
<pre><code>matrix[row][col] = *entry;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2431748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431748</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 08 Dec 2014 10:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 11:44:09 GMT]]></title><description><![CDATA[<p>Danke, das ergibt jetzt sinn.</p>
<p>Was kann ich machen, damit ich den zeiger nicht dereferenzieren muss, sondern direkt speichern kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431762</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 11:45:56 GMT]]></title><description><![CDATA[<p>Steini79 schrieb:</p>
<blockquote>
<p>Was kann ich machen, damit ich den zeiger nicht dereferenzieren muss, sondern direkt speichern kann?</p>
</blockquote>
<p>Ein 2d GraphEntry-Pointer array, aktuell hast du ein 2d GraphEntry array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431763</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 13:40:33 GMT]]></title><description><![CDATA[<p>tkausl schrieb:</p>
<blockquote>
<p>Ein 2d GraphEntry-Pointer array, aktuell hast du ein 2d GraphEntry array.</p>
</blockquote>
<p>Ok, danke, und wie?</p>
<p>Was ich möchte ist, ich bekomme einen zeiger auf ein GraphEntry, das irgendwo außerhalb erstellt wurde. Ich möchte jetzt diese adresse an kreuzungspunkt von zeile und spalte in der matrix speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431783</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 13:40:33 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 14:31:12 GMT]]></title><description><![CDATA[<p>Steini79 schrieb:</p>
<blockquote>
<p>Danke, das ergibt jetzt sinn.</p>
<p>Was kann ich machen, damit ich den zeiger nicht dereferenzieren muss, sondern direkt speichern kann?</p>
</blockquote>
<p>Du könntest deine Methode <code>addGraphEntry()</code> dahingehend ändern, dass sie keinen Pointer erwartet, sondern ein &quot;Value&quot;, bzw. für deinen derzeitigen Code sinnvoll eine konstante Referenz darauf:</p>
<pre><code>void MatrixGraph::addGraphEntry(const GraphEntry&amp; entry, int row, int col)
{
    ...
    matrix[row][col] = entry;
}
</code></pre>
<p>Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431797</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 08 Dec 2014 14:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 14:34:15 GMT]]></title><description><![CDATA[<p>Das geht leider nicht, die signatur der methode ist vorgegeben</p>
<pre><code>void addGraphEntry(GraphEntry *entry, int row, int col);
</code></pre>
<p>Aber danke für den tipp!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431798</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 14:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 14:43:13 GMT]]></title><description><![CDATA[<p>Steini79 schrieb:</p>
<blockquote>
<p>Danke, das ergibt jetzt sinn.</p>
<p>Was kann ich machen, damit ich den zeiger nicht dereferenzieren muss, sondern direkt speichern kann?</p>
</blockquote>
<p>Deine matrix entsprechend definieren. Im Moment speichert die GraphEntry-Objekte und keine Zeiger auf Graphentry-Objekte.</p>
<p>Der Compiler wäre mit</p>
<pre><code>GraphEntry ***matrix;
</code></pre>
<p>zufriedengestellt.</p>
<p>Schön ist aber anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431801</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 08 Dec 2014 14:43:13 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 14:55:56 GMT]]></title><description><![CDATA[<p>Danke, das ist jetzt also ein zeiger auf ein array mit zeigern auf objekte.</p>
<p>Und löschen kann ich das ganze im destrukter wie folgt?</p>
<pre><code>for (int i = 0; i &lt; maxSize; i++) {
    delete[] matrix[i];
  }
  delete[] matrix;
</code></pre>
<p>Oder habe ich da wieder einen denkfehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431806</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 14:55:56 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 15:27:07 GMT]]></title><description><![CDATA[<p>Du hast dann ein 2 dimensionales Array mit Zeigern auf GraphEntry-Objekte</p>
<p>GrapEntry*[3][3]</p>
<p>Deine Init-Methode passt dann nicht mehr und abräumen tust du nur den für die Zeiger angeforderten Speicher.<br />
Die GraphEntry-Objekte selber räumst Du nicht ab.<br />
Normalerweise räumt der die GraphEntry-Objekte auf, der sie auch angelegt hat.<br />
Außer das Design ist so dass die nur angelegt werden und Du die dann selber verwalten musst.<br />
Fragen über Fragen.</p>
<p>Du bist wirklich sicher keine STL-Container und Smartpointer verwenden zu wollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431812</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 08 Dec 2014 15:27:07 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 16:17:21 GMT]]></title><description><![CDATA[<p>STL container verwenden würde ich schon wollen, nur gehts in der übung um arrays und zeiger. <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>
<p>Ich habe das jetzt folgendermaßen geändert:</p>
<pre><code>GraphEntry ***matrix;

void MatrixGraph::init() 
{
  if (maxSize &gt; 0) {
    matrix = new GraphEntry**[maxSize];
    for (int i = 0; i &lt; maxSize; i++)
      matrix[i] = new GraphEntry*[maxSize];
  }
}
</code></pre>
<p>Nur um sicher zu gehen, ich habe hier einen zeiger, der auf ein array zeigt, in welchem wieder zeiger sind die auf ein array zeigen? Hab ich das jetzt so richtig verstanden?</p>
<p>Wenn ich das jetzt wieder alles sauber löschen möchte</p>
<pre><code>for (int i = 0; i &lt; maxSize; i++) {
    delete[] matrix[i]; //hier entferne ich die arrays in den arrays
  }
  delete[] matrix; //hier entferne ich die arrays
</code></pre>
<p>Lieg ich soweit richtig? Die klasse MatrixGraph soll mehr oder weniger die ownership der GraphEntry objekte übernehmen, unabhängig davon, ob das im der realität wirklich so gemacht wird. Daher soll auch alles sauber wieder gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431817</guid><dc:creator><![CDATA[Steini79]]></dc:creator><pubDate>Mon, 08 Dec 2014 16:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 18:29:43 GMT]]></title><description><![CDATA[<p>Bevor Du die Arrays mit delete[] zerstörst musst Du erst durch beide Dimensionen iterieren und delete für die GraphEntry-Zeiger aufrufen wenn Deine MatrixGraph-Klasse den Besitz der Objekte übernommen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431847</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Mon, 08 Dec 2014 18:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 21:44:32 GMT]]></title><description><![CDATA[<p>Dir ist schon klar, dass deine Matrix sich zu einer &quot;richtigen&quot; 2D-Matrix verhält wie</p>
<pre><code>####
########
##
#########
######
</code></pre>
<p>zu</p>
<pre><code>####
####
####
####
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431886</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 08 Dec 2014 21:44:32 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 22:05:59 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Dir ist schon klar, dass deine Matrix sich zu einer &quot;richtigen&quot; 2D-Matrix verhält wie</p>
<pre><code>####
########
##
#########
######
</code></pre>
</blockquote>
<p>Manch einer hat da sogar folgendes Bild vor Augen:</p>
<pre><code>#########

                        ##                    ####                                    

                         ######
</code></pre>
<p><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="😉"
    /><br />
SCNR,<br />
Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431888</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Mon, 08 Dec 2014 22:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrdimensionale Objektstruktur on Mon, 08 Dec 2014 22:30:46 GMT]]></title><description><![CDATA[<p>Das ist dann das Speicherlayout, ich habe das logische Layout dargestellt <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="🙂"
    /> . Das Speicherlayout der &quot;richtigen&quot; Matrix wäre (im Kontrast zu dem was der Threadersteller macht, was in deinem Bild dargestellt ist):</p>
<pre><code>################
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2431893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431893</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 08 Dec 2014 22:30:46 GMT</pubDate></item></channel></rss>