<?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[template und der Fehler C 2075...HILFE!, BITTE!]]></title><description><![CDATA[<p>N' Abend <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="😉"
    /> ,</p>
<p>Ich hab folgendes Problem:<br />
Ich hab eine template Klasse CDemo. Diese allokiert Speicher für ein dynamisches Array im Kontruktor, siehe hier:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
CDemo&lt;T&gt;::CDemo(Size sz, const T&amp; data)
{
   if(sz != 0)
   {
      _pData = new T[sz](data);
      // pData ist vom Typ: T*
      // ...
   }
}
</code></pre>
<p>Wenn ich die Klasse aber so instantiiere gibts gleich die Fehlermeldung dazu:</p>
<pre><code class="language-cpp">CDemo&lt;std::string&gt; str(12, &quot;Hallo&quot;);
</code></pre>
<p>Fehlermeldung des Compilers (VS 2005 Express Edition):</p>
<blockquote>
<p>c:\...\CDemo.hpp(52) : error C2075: 'Target of operator new()': für die Initialisierung eines Arrays sind geschweifte Klammern erforderlich<br />
c:\...\CDemo.hpp(49): Bei der Kompilierung der Klassen-template der NMP::CDemo&lt;Type&gt;::CDemo(NMP::Size,const Type &amp;)-Memberfunktion<br />
with<br />
[<br />
Type=std::string<br />
]<br />
c:\...\main.cpp(13): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;NMP::CDemo&lt;Type&gt;&quot;.<br />
with<br />
[<br />
Type=std::string<br />
]</p>
</blockquote>
<p>Ich danke schonmal für eure Hilfen <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>PS: Size ist unsigned long</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165446/template-und-der-fehler-c-2075-hilfe-bitte</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 17:20:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165446.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Nov 2006 23:07:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Sun, 19 Nov 2006 23:07:48 GMT]]></title><description><![CDATA[<p>N' Abend <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="😉"
    /> ,</p>
<p>Ich hab folgendes Problem:<br />
Ich hab eine template Klasse CDemo. Diese allokiert Speicher für ein dynamisches Array im Kontruktor, siehe hier:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
CDemo&lt;T&gt;::CDemo(Size sz, const T&amp; data)
{
   if(sz != 0)
   {
      _pData = new T[sz](data);
      // pData ist vom Typ: T*
      // ...
   }
}
</code></pre>
<p>Wenn ich die Klasse aber so instantiiere gibts gleich die Fehlermeldung dazu:</p>
<pre><code class="language-cpp">CDemo&lt;std::string&gt; str(12, &quot;Hallo&quot;);
</code></pre>
<p>Fehlermeldung des Compilers (VS 2005 Express Edition):</p>
<blockquote>
<p>c:\...\CDemo.hpp(52) : error C2075: 'Target of operator new()': für die Initialisierung eines Arrays sind geschweifte Klammern erforderlich<br />
c:\...\CDemo.hpp(49): Bei der Kompilierung der Klassen-template der NMP::CDemo&lt;Type&gt;::CDemo(NMP::Size,const Type &amp;)-Memberfunktion<br />
with<br />
[<br />
Type=std::string<br />
]<br />
c:\...\main.cpp(13): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;NMP::CDemo&lt;Type&gt;&quot;.<br />
with<br />
[<br />
Type=std::string<br />
]</p>
</blockquote>
<p>Ich danke schonmal für eure Hilfen <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>PS: Size ist unsigned long</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177495</guid><dc:creator><![CDATA[TMP]]></dc:creator><pubDate>Sun, 19 Nov 2006 23:07:48 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Mon, 20 Nov 2006 07:11:38 GMT]]></title><description><![CDATA[<p>Du kannst das Array in der Art nicht initialisieren. Wenn du das Template drumrum wegläßt bekommt du die gleiche Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177553</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Mon, 20 Nov 2006 07:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Mon, 20 Nov 2006 07:30:47 GMT]]></title><description><![CDATA[<p>[cpp]<br />
template &lt;class T&gt;<br />
CDemo&lt;T&gt;::CDemo(size_t sz, const T* data)<br />
{<br />
if(sz != 0)<br />
{<br />
T* _pData = new T[sz];<br />
memcpy(_pData, data, sz);<br />
}<br />
}<br />
so gehts z.B. <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/1177557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177557</guid><dc:creator><![CDATA[Txyz]]></dc:creator><pubDate>Mon, 20 Nov 2006 07:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Mon, 20 Nov 2006 07:34:04 GMT]]></title><description><![CDATA[<p>Txyz schrieb:</p>
<blockquote>
<p>so gehts z.B. <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>
</blockquote>
<p>Kommt sehr stark auf T an, ob das so geht. Vom fehlenden sizeof abgesehen, gibt es etliche Typen, die sich nicht mit memcpy kopieren lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1177559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1177559</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 20 Nov 2006 07:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Tue, 21 Nov 2006 07:50:16 GMT]]></title><description><![CDATA[<p>Txyz schrieb:</p>
<blockquote>
<p>so gehts z.B. <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>
</blockquote>
<p>Höchstwahrscheinlich nicht. Erstens kopiert memcpy() byteweise und füllt bestenfalls das erste Element mit deinem Wert auf. Und zweitens hat memvpy() keine Ahnung von Copy-Ctor'en und Zuweisungsoperatoren. Also sollte man besser C++ Mittel verwenden:</p>
<pre><code class="language-cpp">CDemo&lt;T&gt;::CDemo(size_t sz, const T&amp; data) 
{ 
  if(sz != 0) 
  { 
    _pData = new T[sz]; 
    fill_n(_pData,sz,data);
    //...
  } 
}
</code></pre>
<p>PS @TMP: Und du solltest daran denken, Copy-Ctor und op= für deine Klasse zu erzeugen.</p>
<p>PPS: Und noch besser ist es, du verwendest statt des T* _pData einen std::vector</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178178</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 21 Nov 2006 07:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Tue, 21 Nov 2006 10:43:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Erstens kopiert memcpy() byteweise und füllt bestenfalls das erste Element mit deinem Wert auf. Und zweitens hat memvpy() keine Ahnung von Copy-Ctor'en und Zuweisungsoperatoren. Also sollte man besser C++ Mittel verwenden:</p>
<pre><code class="language-cpp">CDemo&lt;T&gt;::CDemo(size_t sz, const T&amp; data) 
{ 
  if(sz != 0) 
  { 
    _pData = new T[sz]; 
    fill_n(_pData,sz,data);
    //...
  } 
}
</code></pre>
</blockquote>
<p>Richtiger Ansatz, aber unnötig ineffizient. Ein std::vector wäre hier sicher die richtige Wahl, aber falls man, in einem akuten Anfall von NIHS, doch wieder alles selbst schreiben will, dann würde ich auf die Aufrufe des Standard-Ctors sowie die zusätzliche Anforderung, die dadurch an T gestellt wird, verzichten:</p>
<p>Sprich:</p>
<pre><code class="language-cpp">_pData = static_cast&lt;T*&gt;(operator new(sz * sizeof(T)));
std::uninitialized_fill_n(_pData, sz, data);

// Und später beim Löschen:
operator delete(p);
</code></pre>
<p>sz-Aufrufe des Standard-Ctors eingespart und kaum komplizierter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178320</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Tue, 21 Nov 2006 10:43:53 GMT</pubDate></item><item><title><![CDATA[Reply to template und der Fehler C 2075...HILFE!, BITTE! on Tue, 21 Nov 2006 10:49:06 GMT]]></title><description><![CDATA[<p>Ja, das wäre die nächste Methode gewesen - aber ich bezweifle, daß ein Anfänger das schon kapiert <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="😉"
    /></p>
<p>(übrigens habe ich das Gefühl, daß du gerade die Destruktor-Aufrufe für _pData unterschlagen hast)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178325</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 21 Nov 2006 10:49:06 GMT</pubDate></item></channel></rss>