<?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[Umwandlung eines Zeigers auf ein Array]]></title><description><![CDATA[<p>Folgende Situation:</p>
<pre><code class="language-cpp">class Client
{
public:
	virtual ~Client();
};

class Player : public Client
{
};

void doSomething(Client **clients, size_t count);

int main()
{
	Player **players = new Player*[20];
	players[0] = new Player();

	//Player** kann nicht in Client** konvertiert werden.
	doSomething(players, 1);

	//ist sowas angebracht?
	doSomething(reinterpret_cast&lt;Client**&gt;(players), 1);

	delete players[0];
	delete[] players;
}
</code></pre>
<p>Spricht irgendwas dagegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257298/umwandlung-eines-zeigers-auf-ein-array</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 08:08:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257298.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Dec 2009 13:51:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Umwandlung eines Zeigers auf ein Array on Sat, 26 Dec 2009 13:58:40 GMT]]></title><description><![CDATA[<p>Folgende Situation:</p>
<pre><code class="language-cpp">class Client
{
public:
	virtual ~Client();
};

class Player : public Client
{
};

void doSomething(Client **clients, size_t count);

int main()
{
	Player **players = new Player*[20];
	players[0] = new Player();

	//Player** kann nicht in Client** konvertiert werden.
	doSomething(players, 1);

	//ist sowas angebracht?
	doSomething(reinterpret_cast&lt;Client**&gt;(players), 1);

	delete players[0];
	delete[] players;
}
</code></pre>
<p>Spricht irgendwas dagegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828017</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 26 Dec 2009 13:58:40 GMT</pubDate></item><item><title><![CDATA[Reply to Umwandlung eines Zeigers auf ein Array on Sat, 26 Dec 2009 16:58:44 GMT]]></title><description><![CDATA[<p>Naja, Player wird ja in der Regel größer sein als Client (wenn die Klassen mal mehr als leere Hüllen sind) und dann wird der Cast ordentlich schiefgehen. Warum benutzt du nicht Polymorphie? Das virtual verwendest du ja schon und genau dafür ist Polymorphie doch gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828078</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 26 Dec 2009 16:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Umwandlung eines Zeigers auf ein Array on Sat, 26 Dec 2009 20:31:23 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Naja, Player wird ja in der Regel größer sein als Client (wenn die Klassen mal mehr als leere Hüllen sind) und dann wird der Cast ordentlich schiefgehen. Warum benutzt du nicht Polymorphie? Das virtual verwendest du ja schon und genau dafür ist Polymorphie doch gedacht.</p>
</blockquote>
<p>Die Zeiger auf beide Typen sind aber gleich groß, sonst wäre der Cast auch gar nicht möglich. Und wie soll ich hier Polymorphie verwenden, denn bei der Sache sind Methoden von <code>Client</code> unerheblich. Ich brauche einfach eine andere Möglichkeit, die Array-Elemente zu übergeben, falls das mit dem <code>reinterpret_cast</code> nicht so das Wahre ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828192</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 26 Dec 2009 20:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Umwandlung eines Zeigers auf ein Array on Sat, 26 Dec 2009 20:49:49 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Die Zeiger auf beide Typen sind aber gleich groß, sonst wäre der Cast auch gar nicht möglich.</p>
</blockquote>
<p>Das ist konfus. Jeder beliebige Objektzeiger kann in einen beliebigen anderen Objektzeiger verwandelt werden (u.U. mit UB).</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<p>Spricht irgendwas dagegen?</p>
</blockquote>
<p>Warum sollte man so etwas machen wollen? Elemente von Arrays - oder, was das betrifft, jedes beliebigen Standard-Containers - sind nie polymorph.</p>
<p>So etwas</p>
<pre><code class="language-cpp">doSomething(reinterpret_cast&lt;const Client* const*&gt;(players), 1);
</code></pre>
<p>könnte u.U. gerade noch funktionieren, ist aber unportabel (und formal undefiniert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828200</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 26 Dec 2009 20:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to Umwandlung eines Zeigers auf ein Array on Sat, 26 Dec 2009 21:10:29 GMT]]></title><description><![CDATA[<p>Wie sieht denn doSomething aus? Wird da jedes Element einzeln behandelt, also einlelne Methodenaufrufe?<br />
Oder betrachtest du das Array und sortierst, oder suchst, oder sonstwas?<br />
Falls ersteres, schreib dir eine Funktion</p>
<pre><code class="language-cpp">void doSomething(Client* client);
</code></pre>
<p>welche nur den einen Client bearbeitet.<br />
Für alle clients machst du dann sowas:</p>
<pre><code class="language-cpp">std::for_each(clients, clients+size, doSomething);
</code></pre>
<p><a href="http://cplusplus.com/reference/algorithm/for_each/" rel="nofollow">http://cplusplus.com/reference/algorithm/for_each/</a></p>
<p>Ansonsten, wenn es denn auch portabel sein soll, kannst du dir ne Funktion schreiben, die ein Array + size entgegen nimmt, und dann alle Elemente einzeln gecastet in ein neues Array packt und zurück gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828216</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sat, 26 Dec 2009 21:10:29 GMT</pubDate></item></channel></rss>