<?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[Array von Objekten]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich hab gerade versucht, ein C-Array von Objekten zu erstellen. Allerdings bekomme ich die Fehlermeldung &quot;Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'stuff *' akzeptiert&quot;.</p>
<pre><code class="language-cpp">class stuff  {
private:
	int x;
};

int main(int argc, char* argv[]) 
{
	// geht
	int* x = new int[10];
	for(int i = 0; i &lt; 10; i++){
		x[i] = i;
	}

	// geht nicht
	stuff* arr = new stuff[10];
	for(int i = 0; i &lt; 10; i++)  {
		arr[i] = new stuff; // Fehlermeldung
	}
	return 0;
}
</code></pre>
<p>Hab schon lange kein C++ mehr programmiert. Ich dachte immer, dass man ein Array von Objekten genauso wie ein Array von Integern (oder anderen primitiven Datentypen) erstellen kann. Oder habe ich hier irgendwo einen Denkfehler drinn? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234302/array-von-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 06:22:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234302.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Feb 2009 11:56:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array von Objekten on Mon, 16 Feb 2009 11:56:50 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich hab gerade versucht, ein C-Array von Objekten zu erstellen. Allerdings bekomme ich die Fehlermeldung &quot;Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'stuff *' akzeptiert&quot;.</p>
<pre><code class="language-cpp">class stuff  {
private:
	int x;
};

int main(int argc, char* argv[]) 
{
	// geht
	int* x = new int[10];
	for(int i = 0; i &lt; 10; i++){
		x[i] = i;
	}

	// geht nicht
	stuff* arr = new stuff[10];
	for(int i = 0; i &lt; 10; i++)  {
		arr[i] = new stuff; // Fehlermeldung
	}
	return 0;
}
</code></pre>
<p>Hab schon lange kein C++ mehr programmiert. Ich dachte immer, dass man ein Array von Objekten genauso wie ein Array von Integern (oder anderen primitiven Datentypen) erstellen kann. Oder habe ich hier irgendwo einen Denkfehler drinn? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664624</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Mon, 16 Feb 2009 11:56:50 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Mon, 16 Feb 2009 12:11:35 GMT]]></title><description><![CDATA[<p>Chris++ schrieb:</p>
<blockquote>
<p>Hab schon lange kein C++ mehr programmiert. Ich dachte immer, dass man ein Array von Objekten genauso wie ein Array von Integern (oder anderen primitiven Datentypen) erstellen kann. Oder habe ich hier irgendwo einen Denkfehler drinn? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Wie erstellst du denn ein Array aus int?</p>
<pre><code class="language-cpp">int* arr = new int[10];
    for(int i = 0; i &lt; 10; i++)  {
        arr[i] = i;
    }
</code></pre>
<p>und warum dann hier plötzlich new?</p>
<pre><code class="language-cpp">stuff* arr = new stuff[10];
    for(int i = 0; i &lt; 10; i++)  {
        arr[i] = new stuff; // Fehlermeldung
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1664630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664630</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 16 Feb 2009 12:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Mon, 16 Feb 2009 12:23:43 GMT]]></title><description><![CDATA[<p>Chris++ schrieb:</p>
<blockquote>
<p>ich hab gerade versucht, ein C-Array von Objekten zu erstellen. Allerdings bekomme ich die Fehlermeldung &quot;Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'stuff *' akzeptiert&quot;...</p>
<p>Ich dachte immer, dass man ein Array von Objekten genauso wie ein Array von Integern (oder anderen primitiven Datentypen) erstellen kann.</p>
</blockquote>
<p>1. Dann tue es aber auch bitte wie bei dem int-Array. Du versucht einen Zeiger einem Objekt zuzuweisen (Dein Array enthält nach deinem Code Objekte, nicht Zeiger - du weist ja auch nicht dem int-Array new-Allozierte Werte zu).</p>
<p>2. Zu jedem new gehört ein delete, zu jedem new[] ein delete[]. In deinem Fall sind alle new ohnehin hinfällig, warum schreibst du nicht einfach:</p>
<pre><code class="language-cpp">//...
int x[10];
for(int i = 0; i &lt; 10; i++)
  x[i] = i;

stuff arr[10];
for(int i = 0; i &lt; 10; i++)
    arr[i] = stuff(); // Konstruktor + Zuweisungsoperator
//...
</code></pre>
<p>3. Wie wäre es mit der C++ Alternative (std::vector, std::tr1::array)?</p>
<pre><code class="language-cpp">// Für Variante 1
#include &lt;vector&gt;
// Für Variante 2 (Falls bereits vom Compiler unterstützt, oder z.B.
//                 durch boost nachgerüstet)
#include &lt;array&gt;

//...

int main()
{
    // Variante 1 (Dynamisch Wachsender Vektor)
    // Durch anhängen
    std::vector&lt;stuff&gt; arr;
    for(int i=0; i&lt;10; ++i)
        arr.push_back(stuff());

    // Durch Initialisierung mit Standardkonstruktor für 10 Elemente
    std::vector&lt;stuff&gt; arr2(10);

    // Variante 2 (Array fester Größe)
    // Durch direktes Setzen (Ist aber bereits mit jeweils den Standard-
    // konstruktor initialisiert).
    std::tr1::array&lt;stuff, 10&gt; arr3;
    for(int i=0; i&lt;10; ++i)
        arr2[i] = stuff();
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664635</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 16 Feb 2009 12:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Mon, 16 Feb 2009 13:58:10 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Wie erstellst du denn ein Array aus int?</p>
<pre><code class="language-cpp">int* arr = new int[10];
    for(int i = 0; i &lt; 10; i++)  {
        arr[i] = i;
    }
</code></pre>
<p>und warum dann hier plötzlich new?</p>
<pre><code class="language-cpp">stuff* arr = new stuff[10];
    for(int i = 0; i &lt; 10; i++)  {
        arr[i] = new stuff; // Fehlermeldung
    }
</code></pre>
</blockquote>
<p>Ja klar ... ich hätts so machen müssen:</p>
<pre><code class="language-cpp">stuff** arr = new stuff*[10];
</code></pre>
<p>Naja manchmal übersieht man solche Sachen einfach <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="🙄"
    /> Normalerweise hätte ich das auch mit einem Vector gemacht (so wie in asc's Beispiel). Aber ich musste jetzt noch rausfinden, was an der C-Array Variante falsch war (das delete[] hatte ich absichtlich weggelassen).</p>
<p>Danke euch beiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664685</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Mon, 16 Feb 2009 13:58:10 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Mon, 16 Feb 2009 14:09:27 GMT]]></title><description><![CDATA[<p>Chris++ schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Wenn die Elemente wirklich als Zeiger gehalten werden sollen, gibt es noch weitere Alternativen:</p>
<p>a) Datenhaltung über boost::shared_ptr bzw. std::tr1::shared_ptr<br />
b) <a href="http://www.boost.org/doc/libs/1_38_0/libs/ptr_container/doc/ptr_container.html" rel="nofollow">Boost Pointer Container Library</a></p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1664693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1664693</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 16 Feb 2009 14:09:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Thu, 14 Jun 2012 12:35:11 GMT]]></title><description><![CDATA[<p>Blöde Frage Mal, aber folgender Code wird doch Probleme machen:</p>
<pre><code class="language-cpp">stuff::stuff(int i)
{
  m_items = new int[i];
}

stuff &amp;stuff::operator=(const stuff &amp;rhs)
{
   // destroy m_items
   // alloc m_items
   // copy from rhs
   return *this;
}

// ...

 stuff *arr = new stuff[dynamicSize]; 
for(int i = 0; i &lt; 10; i++) 
     arr[i] = stuff(i); // Konstruktor + Zuweisungsoperator 
// ...

delete [] arr;
</code></pre>
<p>, denn<br />
- new stuff[dynamicSize] allokiert &quot;sizeof(stuff) * dynamicSize&quot; Bytes (nicht initialisiert)<br />
- arr[i] = stuff(i) ruft auf: 1. stuff(i) 2. arr[i].operator=(stuff(i))</p>
<p>Nachdem das Array nicht initialisiert wurde können bei dem operator= Probleme auftreten. Oder wird bei &quot;new anyclass[amount]&quot; automatisch der default ctor aufgerufen?</p>
<p>Besten Dank, ich steh diesbzgl. auf der Leitung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223102</guid><dc:creator><![CDATA[PhilippHToner]]></dc:creator><pubDate>Thu, 14 Jun 2012 12:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array von Objekten on Thu, 14 Jun 2012 12:45:02 GMT]]></title><description><![CDATA[<p>PhilippHToner schrieb:</p>
<blockquote>
<p>Oder wird bei &quot;new anyclass[amount]&quot; automatisch der default ctor aufgerufen?</p>
</blockquote>
<p>Ja. IMHO hättest dafür aber nicht einen 3 Jahre alten Thread reaktivieren müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223106</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 14 Jun 2012 12:45:02 GMT</pubDate></item></channel></rss>