<?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[Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode.]]></title><description><![CDATA[<p>Hallo,</p>
<p>Habe hier folgendes Problem:</p>
<p>Meine Klasse CModell besteht aus Objekten der Klasse CElement (CElement ist abstrakt, es werden Objekte ihrer Unterklassen erstellt (Factory Pattern)). Die erstellten Elemente speichere ich in einem CTypedPtrArray:</p>
<pre><code>CTypedPtrArray &lt;CPtrArray , Ce8Element*&gt; ptrModell;
</code></pre>
<p>Aufgebaut wird die Struktur so:</p>
<pre><code>...
CNode temp;   //CNode ist Unterklasse von CElement
nAktIndex = m_ptrElement.Add ( &amp;temp ); 
m_nAnzElements++;
(*m_ptrElement[nAktIndex]).setAttributes();
...
</code></pre>
<p>Weiterhin habe ich in der Klasse CModell eine public Methode definiert welche mir den Zeiger auf die aufgebaute Datenstruktur zurückgibt:</p>
<pre><code>void CModell::getModell(CTypedPtrArray &lt;CPtrArray , Ce8Element*&gt; *ptrModell)
{
	(*ptrModell).Copy(m_ptrElement);
}
</code></pre>
<p>Ok, nun bin ich in der Klasse CAlgo. Habe ich im private Bereich eine Instanz von CModell erstellt (Und ein CTypedPtrArray&lt;CPtrArray, Ce8Element*&gt;):</p>
<pre><code>private:
	Ce8Modell								m_Modell;
	CTypedPtrArray&lt;CPtrArray, Ce8Element*&gt; m_ptrModell;
</code></pre>
<p>Nun geh ich hin, in die cpp von CAlgo und das sieht so aus:</p>
<pre><code>Ce8Algo::Ce8Algo()
{
	init(); 	
}

Ce8Algo::~Ce8Algo()
{
}

bool Ce8Algo::init()
{
	m_Modell.buildModell();  //baut die Datenstruktur auf
	m_Modell.getModell( &amp;m_ptrModell);  //Hier hole ich mir die Datenstruktur

         //Nun möchte ich die einzelnen Instanzen bzw. dessen Attribute anzeigen lassen
         //print() ist in der CElement Klasse virtuell und wird in CNode überschrieben
         //PROBLEM: Er crasht bei: (*m_ptrModell[ii]).print();
	for(UINT ii = 0; ii &lt; m_Modell.getAnzElements(); ii++)
	{
		(*m_ptrModell[ii]).print();
	}

	return true;
}
</code></pre>
<p>Wenn ich aber (*m_ptrModell[ii]).print(); im CModell.cpp irgendwo aufrufe, dann klappts! Auch der GET (m_Modell.getModell( &amp;m_ptrModell);) funktioniert. Kann mir beim besten Willen nicht erklären wieso er hier in der CAlgo.cpp an dieser Stelle crasht.<br />
Weiss jemand was es sein könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/61680/frage-an-die-profis-zugriff-auf-ctypedptrarray-objekt-gt-ausführen-dessen-methode</link><generator>RSS for Node</generator><lastBuildDate>Wed, 03 Jun 2026 18:31:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/61680.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Jan 2004 09:17:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 09:17:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Habe hier folgendes Problem:</p>
<p>Meine Klasse CModell besteht aus Objekten der Klasse CElement (CElement ist abstrakt, es werden Objekte ihrer Unterklassen erstellt (Factory Pattern)). Die erstellten Elemente speichere ich in einem CTypedPtrArray:</p>
<pre><code>CTypedPtrArray &lt;CPtrArray , Ce8Element*&gt; ptrModell;
</code></pre>
<p>Aufgebaut wird die Struktur so:</p>
<pre><code>...
CNode temp;   //CNode ist Unterklasse von CElement
nAktIndex = m_ptrElement.Add ( &amp;temp ); 
m_nAnzElements++;
(*m_ptrElement[nAktIndex]).setAttributes();
...
</code></pre>
<p>Weiterhin habe ich in der Klasse CModell eine public Methode definiert welche mir den Zeiger auf die aufgebaute Datenstruktur zurückgibt:</p>
<pre><code>void CModell::getModell(CTypedPtrArray &lt;CPtrArray , Ce8Element*&gt; *ptrModell)
{
	(*ptrModell).Copy(m_ptrElement);
}
</code></pre>
<p>Ok, nun bin ich in der Klasse CAlgo. Habe ich im private Bereich eine Instanz von CModell erstellt (Und ein CTypedPtrArray&lt;CPtrArray, Ce8Element*&gt;):</p>
<pre><code>private:
	Ce8Modell								m_Modell;
	CTypedPtrArray&lt;CPtrArray, Ce8Element*&gt; m_ptrModell;
</code></pre>
<p>Nun geh ich hin, in die cpp von CAlgo und das sieht so aus:</p>
<pre><code>Ce8Algo::Ce8Algo()
{
	init(); 	
}

Ce8Algo::~Ce8Algo()
{
}

bool Ce8Algo::init()
{
	m_Modell.buildModell();  //baut die Datenstruktur auf
	m_Modell.getModell( &amp;m_ptrModell);  //Hier hole ich mir die Datenstruktur

         //Nun möchte ich die einzelnen Instanzen bzw. dessen Attribute anzeigen lassen
         //print() ist in der CElement Klasse virtuell und wird in CNode überschrieben
         //PROBLEM: Er crasht bei: (*m_ptrModell[ii]).print();
	for(UINT ii = 0; ii &lt; m_Modell.getAnzElements(); ii++)
	{
		(*m_ptrModell[ii]).print();
	}

	return true;
}
</code></pre>
<p>Wenn ich aber (*m_ptrModell[ii]).print(); im CModell.cpp irgendwo aufrufe, dann klappts! Auch der GET (m_Modell.getModell( &amp;m_ptrModell);) funktioniert. Kann mir beim besten Willen nicht erklären wieso er hier in der CAlgo.cpp an dieser Stelle crasht.<br />
Weiss jemand was es sein könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/437757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437757</guid><dc:creator><![CDATA[bsash]]></dc:creator><pubDate>Fri, 16 Jan 2004 09:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 10:33:47 GMT]]></title><description><![CDATA[<p>Es scheint daran zu liegen, dass die print methode in der Klasse CElement virtuell ist, und es soll ja nicht die des Elementes verwendet werden sondern die vom CNode.<br />
Sobald ich das virtual wegnehme, crasht er nicht mehr. Aber es wird halt die methode von CElement aufgerufen und nicht die benötigte von CNode. Weiss jemand Rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/437806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437806</guid><dc:creator><![CDATA[bsash]]></dc:creator><pubDate>Fri, 16 Jan 2004 10:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 11:31:35 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">CNode temp;   //CNode ist Unterklasse von CElement 
nAktIndex = m_ptrElement.Add ( &amp;temp );
</code></pre>
<p>hier fügst du ja einen zeiger auf eine lokale variable hinzu. die ist nach der funktion ungültig. vielleicht liegts daran? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/437855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437855</guid><dc:creator><![CDATA[hmm]]></dc:creator><pubDate>Fri, 16 Jan 2004 11:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 11:52:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Es sieht schon komisch aus, aber wenn ich die Referenz wegnehme, dann kriege ich:</p>
<pre><code class="language-cpp">error C2664: 'Add' : cannot convert parameter 1 from 'class Ce8Node_C' to 'class Ce8Element *'
</code></pre>
<p>Interessant ist halt dass es innerhalb der Klasse CModell (CModell.cpp) auf genau diesselbe Art funktioniert (Achtung: m_ptrElement heisst jetzt m_ptrGraph):</p>
<pre><code class="language-cpp">CNode temp;   //CNode ist Unterklasse von CElement  
nAktIndex = m_ptrGraph.Add ( &amp;temp );
CTypedPtrArray &lt;CPtrArray , Ce8Element*&gt; tstModell;
getGraph(&amp;tstModell);
(*tstModell[nAktIndex]).print();
</code></pre>
<p>Und wenn ich das ganze in der CAlgo (CAlgo.cpp) mache indem ich erst das Modell referenziere gehts nicht mehr:</p>
<pre><code class="language-cpp">bool Ce8Algo::init(Ce8Modell *ptrModell)
{
	m_Modell = ptrModell;
	(*m_Modell).getGraph( &amp;m_ptrGraph);

	for(UINT ii = 0; ii &lt; (*m_Modell).getAnzElements(); ii++)
	{
		(*m_ptrGraph[ii]).print();
	}
	return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/437878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437878</guid><dc:creator><![CDATA[bsash]]></dc:creator><pubDate>Fri, 16 Jan 2004 11:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 12:25:40 GMT]]></title><description><![CDATA[<p>weil die Variable temp nur innerhalb der Funktion gültig ist und dir dessen Zeiger speicherst ist der Zeiger nach der Funktion ungültig. Mach mal zum Test statt</p>
<pre><code class="language-cpp">CNode temp;   //CNode ist Unterklasse von CElement  
nAktIndex = m_ptrElement.Add ( &amp;temp );
</code></pre>
<pre><code class="language-cpp">nAktIndex = m_ptrElement.Add ( new CNode() );
</code></pre>
<p>Funktioniert es dann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/437928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437928</guid><dc:creator><![CDATA[hmm]]></dc:creator><pubDate>Fri, 16 Jan 2004 12:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 12:32:03 GMT]]></title><description><![CDATA[<p>achso: wenn du referenzen nimmst, dann mach das &amp; vor temp weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/437939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437939</guid><dc:creator><![CDATA[hmm]]></dc:creator><pubDate>Fri, 16 Jan 2004 12:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 12:42:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">nAktIndex = m_ptrElement.Add ( new CNode() );
</code></pre>
<p>Geht leider nicht, deswegen der Umweg über die temp Variable.</p>
<pre><code class="language-cpp">Ce8Element *temp = new Ce8Node_C;
nAktIndex = m_ptrGraph.Add ( temp );
</code></pre>
<p>Nun klappts! <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 />
Anfängerfehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/437949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437949</guid><dc:creator><![CDATA[bsash]]></dc:creator><pubDate>Fri, 16 Jan 2004 12:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 13:11:52 GMT]]></title><description><![CDATA[<p>aber beachte. du musst das element auch irgendwann wieder freigeben mit delete</p>
]]></description><link>https://www.c-plusplus.net/forum/post/437993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/437993</guid><dc:creator><![CDATA[hmm]]></dc:creator><pubDate>Fri, 16 Jan 2004 13:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage an die Profis: Zugriff auf CTypedPtrArray Objekt -&amp;gt; ausführen dessen Methode. on Fri, 16 Jan 2004 13:40:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for (int ii = 0; ii &lt; m_ptrGraph.GetSize(); ii++) { delete m_ptrGraph[ii]; }
m_ptrGraph.RemoveAll();
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <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/438022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/438022</guid><dc:creator><![CDATA[bsash]]></dc:creator><pubDate>Fri, 16 Jan 2004 13:40:45 GMT</pubDate></item></channel></rss>