<?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[Initialisieren eines Arrays aus Objekten auf dem Stack]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich möchte ein Array aus zwei BigInts direkt auf dem Stack initialieren.</p>
<p>Ich habe in der Klasse folgenden Konstruktor definiert:</p>
<pre><code class="language-cpp">explicit BigInt(unsigned int);
</code></pre>
<p>Dazu habe ich folgendes versucht:</p>
<pre><code class="language-cpp">BigInt bigInts[] = {1, 2};
</code></pre>
<p>Leider schmeißt das einen Fehler.</p>
<pre><code>Fehler: Umwandlung von int in nicht-skalaren Typen BigInt angefordert
</code></pre>
<p>Gehe ich richtig in der Annahme, dass der Compiler den int-Wert in eine Speicheradresse umwandeln möchte?</p>
<p>Danach hab ich es etwas verändert nochmal mit folgendem probiert:</p>
<pre><code class="language-cpp">BigInt bigInts[] = {BigInt(1), BigInt(2)};
</code></pre>
<p>Leider verweigert mir der Compiler auch das mit einer Fehlermeldung.</p>
<pre><code>Fehler: keine passende Funktion für Aufruf von BigInt::BigInt(BigInt)
</code></pre>
<p>Könnte mir bitte einer von euch erklären, wie man das richtig macht, bzw. ob das überhaupt möglich ist?</p>
<p>Ach ja, folgendes geht natürlich auch, aber dabei wird ja einmal der default-Konstruktor und danach noch der Zuweisungsoperator aufgerufen, wobei ich ja letzteres verhindern möchte:</p>
<pre><code class="language-cpp">BigInt bigInts[2];
bigInts[0] = BigInt(1);
bigInts[1] = BigInt(2);
</code></pre>
<p>Eine kleine Verständnis-Frage hätte ich dazu auch noch:<br />
Wird, wenn ich ein Array erstelle, das Array immer im Heap angelegt und auf dem Stack nur ein Zeiger darauf oder kann man das Array auch wirklich auf dem Stack ablegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306978/initialisieren-eines-arrays-aus-objekten-auf-dem-stack</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 03:02:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306978.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Aug 2012 07:30:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisieren eines Arrays aus Objekten auf dem Stack on Mon, 13 Aug 2012 07:30:13 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>Ich möchte ein Array aus zwei BigInts direkt auf dem Stack initialieren.</p>
<p>Ich habe in der Klasse folgenden Konstruktor definiert:</p>
<pre><code class="language-cpp">explicit BigInt(unsigned int);
</code></pre>
<p>Dazu habe ich folgendes versucht:</p>
<pre><code class="language-cpp">BigInt bigInts[] = {1, 2};
</code></pre>
<p>Leider schmeißt das einen Fehler.</p>
<pre><code>Fehler: Umwandlung von int in nicht-skalaren Typen BigInt angefordert
</code></pre>
<p>Gehe ich richtig in der Annahme, dass der Compiler den int-Wert in eine Speicheradresse umwandeln möchte?</p>
<p>Danach hab ich es etwas verändert nochmal mit folgendem probiert:</p>
<pre><code class="language-cpp">BigInt bigInts[] = {BigInt(1), BigInt(2)};
</code></pre>
<p>Leider verweigert mir der Compiler auch das mit einer Fehlermeldung.</p>
<pre><code>Fehler: keine passende Funktion für Aufruf von BigInt::BigInt(BigInt)
</code></pre>
<p>Könnte mir bitte einer von euch erklären, wie man das richtig macht, bzw. ob das überhaupt möglich ist?</p>
<p>Ach ja, folgendes geht natürlich auch, aber dabei wird ja einmal der default-Konstruktor und danach noch der Zuweisungsoperator aufgerufen, wobei ich ja letzteres verhindern möchte:</p>
<pre><code class="language-cpp">BigInt bigInts[2];
bigInts[0] = BigInt(1);
bigInts[1] = BigInt(2);
</code></pre>
<p>Eine kleine Verständnis-Frage hätte ich dazu auch noch:<br />
Wird, wenn ich ein Array erstelle, das Array immer im Heap angelegt und auf dem Stack nur ein Zeiger darauf oder kann man das Array auch wirklich auf dem Stack ablegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241358</guid><dc:creator><![CDATA[problemchild]]></dc:creator><pubDate>Mon, 13 Aug 2012 07:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren eines Arrays aus Objekten auf dem Stack on Mon, 13 Aug 2012 08:25:29 GMT]]></title><description><![CDATA[<p>problemchild schrieb:</p>
<blockquote>
<p>Gehe ich richtig in der Annahme, dass der Compiler den int-Wert in eine Speicheradresse umwandeln möchte?</p>
</blockquote>
<p>nein. Der Compiler versucht eine implizite Konvertierung. Da dein Konstruktor aber &quot;explicit&quot; ist, darf er das nicht. Du könntest natürlich das &quot;explicit&quot; wegnehmen, aber vermutlich steht das nicht ohne Grund da...</p>
<p>problemchild schrieb:</p>
<blockquote>
<p>Danach hab ich es etwas verändert nochmal mit folgendem probiert:</p>
<pre><code class="language-cpp">BigInt bigInts[] = {BigInt(1), BigInt(2)};
</code></pre>
<p>Leider verweigert mir der Compiler auch das mit einer Fehlermeldung.</p>
<pre><code>Fehler: keine passende Funktion für Aufruf von BigInt::BigInt(BigInt)
</code></pre>
<p>Könnte mir bitte einer von euch erklären, wie man das richtig macht, bzw. ob das überhaupt möglich ist?</p>
</blockquote>
<p>Der Compiler findet keinen Kopierkonstruktor. Komisch, eigentlich wird dieser automatisch generiert. Hast du diesen explizit deaktiviert?</p>
<p>Nur so nebenbei: Gibt es einen Grund, warum du ein array und keinen std::vector nimmst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241384</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 13 Aug 2012 08:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren eines Arrays aus Objekten auf dem Stack on Mon, 13 Aug 2012 09:09:40 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort daddy_felix.</p>
<p>daddy_felix schrieb:</p>
<blockquote>
<p>Der Compiler findet keinen Kopierkonstruktor. Komisch, eigentlich wird dieser automatisch generiert. Hast du diesen explizit deaktiviert?</p>
</blockquote>
<p>Ich hab meinen Kopierkonstruktor auch als explicit definiert:</p>
<pre><code class="language-cpp">explicit BigInt(BigInt const &amp;);
</code></pre>
<p>Wenn ich das explicit entferne, dann funktioniert die Variante mit dem &quot;BigInt(1)&quot;.</p>
<p>Was ich jetzt bloß nicht verstehe, ist warum ich das explicit vom Kopierkonstruktor entfernen muss, wenn er sowieso nicht aufgerufen wird.<br />
Nachdem ich das Programm jetzt laufen gelassen hab hat er nämlich (wie erwartet) nur den Konstruktor</p>
<pre><code class="language-cpp">explicit BigInt(unsigned int);
</code></pre>
<p>aufgerufen.</p>
<p>Das explicit-Schlüsselwort benutze ich eigentlich, weil ich nicht möchte, dass der Compiler Umwandlungen macht, die ich u. U. nicht berücksichtigt hab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241417</guid><dc:creator><![CDATA[problemchild]]></dc:creator><pubDate>Mon, 13 Aug 2012 09:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren eines Arrays aus Objekten auf dem Stack on Mon, 13 Aug 2012 09:13:06 GMT]]></title><description><![CDATA[<p>Oh, und den vector nehm ich nicht her, weil ich genau weiß, dass ich nur diese beide Instanzen brauche (Speicherung der beiden vorherigen Zahlen in einer Fibonacci Folge).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241419</guid><dc:creator><![CDATA[problemchild]]></dc:creator><pubDate>Mon, 13 Aug 2012 09:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisieren eines Arrays aus Objekten auf dem Stack on Mon, 13 Aug 2012 10:09:12 GMT]]></title><description><![CDATA[<p>problemchild schrieb:</p>
<blockquote>
<p>Was ich jetzt bloß nicht verstehe, ist warum ich das explicit vom Kopierkonstruktor entfernen muss, wenn er sowieso nicht aufgerufen wird.</p>
</blockquote>
<p>Weil er den heimlich weglassen darf. Aber zugänglich muss er trotzdem sein, deshalb meckert er.<br />
Übrigens, ein expliziter Copy-Ctor ist nicht gerade das gelbe vom Ei, die meisten Kopien werden nämlich implizit gemacht und können garnicht explizit erfolgen.</p>
<blockquote>
<p>Das explicit-Schlüsselwort benutze ich eigentlich, weil ich nicht möchte, dass der Compiler Umwandlungen macht, die ich u. U. nicht berücksichtigt hab.</p>
</blockquote>
<p>Ist auch meistens richtig so, allerdings ist der Copy-Ctor ja keine Umwandlung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241436</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 13 Aug 2012 10:09:12 GMT</pubDate></item></channel></rss>