<?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[vector mit Objekten füllen, die keinen Default Ctor haben?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine Klasse Spline, und die braucht als Member einen Vector von HermiteCurve Objekten:</p>
<pre><code class="language-cpp">class Spline {
   std::vector&lt;HermiteCurve&gt; member;

}:
</code></pre>
<p>Das Problem ist nun, dass Bar KEINEN Default Ctor hat und ich bekomme wohl deswegen einen Fehler:</p>
<blockquote>
<p>Error 2 error C2512: 'math::HermiteCurve::HermiteCurve' : no appropriate default constructor available</p>
</blockquote>
<p>Für HermiteCurve macht ein Ctor ohne Werte auch einfach keinen Sinn. Wie kann ich das Problem beseitigen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243894/vector-mit-objekten-füllen-die-keinen-default-ctor-haben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:43:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243894.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jun 2009 16:34:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 16:34:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine Klasse Spline, und die braucht als Member einen Vector von HermiteCurve Objekten:</p>
<pre><code class="language-cpp">class Spline {
   std::vector&lt;HermiteCurve&gt; member;

}:
</code></pre>
<p>Das Problem ist nun, dass Bar KEINEN Default Ctor hat und ich bekomme wohl deswegen einen Fehler:</p>
<blockquote>
<p>Error 2 error C2512: 'math::HermiteCurve::HermiteCurve' : no appropriate default constructor available</p>
</blockquote>
<p>Für HermiteCurve macht ein Ctor ohne Werte auch einfach keinen Sinn. Wie kann ich das Problem beseitigen?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731133</guid><dc:creator><![CDATA[schiwet]]></dc:creator><pubDate>Mon, 22 Jun 2009 16:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 16:37:57 GMT]]></title><description><![CDATA[<p>würde statt vector list gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731136</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 22 Jun 2009 16:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 16:57:30 GMT]]></title><description><![CDATA[<p>Hi schiwet,</p>
<p>ich schätze mal HermiteCurve erbt von Bar, oder?</p>
<p>Das Problem ist, wenn ich das richtig sehe, dass du im Konstruktor nicht<br />
expizit einen Konstruktor der Basisklasse aufrufst, wodurch er versucht<br />
den (nicht-vorhandenen) Default-Konstruktor zu nehmen.</p>
<p>Hast du sowas wie:</p>
<pre><code class="language-cpp">HermiteCurve :: HermiteCurve() : Bar(0 /* oder welcher Parameter auch immer */){
}
</code></pre>
<p>Das Problem liegt (wie ich denke) nicht an dem geposteten Code...</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731145</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 22 Jun 2009 16:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 17:12:01 GMT]]></title><description><![CDATA[<p>Elemente in Standardcontainern müssen nicht zwingend standardkonstruierbar sein.</p>
<p>Wenn du den <code>std::vector</code> -Konstruktor mit einer Grösse und einem Anfangswert als Parametern aufrufst, werden die Objekte kopiert. Gleiches gilt für <code>resize()</code> . Bei <code>insert</code> und <code>push_back</code> musst du sowieso immer gleich einen Wert angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731154</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:12:01 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 17:54:15 GMT]]></title><description><![CDATA[<p>Nein, HermiteCurve erbt von keiner Klasse.</p>
<p>Jetzt blick ich garnicht mehr durch! Auf einmal funktioniert alles, obwohl ich nix geändert hab! Hä??</p>
<p>Gehen wir das mal kurz durch: Mein Ctor von Spline ruft nicht explizit irgend einen Ctor von member auf, also müsste doch automatisch der Default Ctor von std::vector aufgerufen werden, wenn ich ein Objekt von Spline anlege, oder? Da ich das Programm jetzt (auf einmal) ohne Probleme starten kann, braucht ein T Typ offenbar KEINEN Default Ctor, wenn ich das mache:</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; member;
</code></pre>
<p>Richtig? Da wird dann intern in vector einfach kein einziges Objekt von T angelegt, oder?</p>
<p>Wenn ich hingegen das schreibe:</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; member(3);
</code></pre>
<p>dann braucht T einen Default Ctor, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731182</guid><dc:creator><![CDATA[schiwet]]></dc:creator><pubDate>Mon, 22 Jun 2009 17:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to vector mit Objekten füllen, die keinen Default Ctor haben? on Mon, 22 Jun 2009 18:00:10 GMT]]></title><description><![CDATA[<p>schiwet schrieb:</p>
<blockquote>
<p>Da ich das Programm jetzt (auf einmal) ohne Probleme starten kann, braucht ein T Typ offenbar KEINEN Default Ctor, wenn ich das mache:</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; member;
</code></pre>
<p>Richtig? Da wird dann intern in vector einfach kein einziges Objekt von T angelegt, oder?</p>
</blockquote>
<p>Richtig.</p>
<p>schiwet schrieb:</p>
<blockquote>
<p>Wenn ich hingegen das schreibe:</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; member(3);
</code></pre>
<p>dann braucht T einen Default Ctor, oder?</p>
</blockquote>
<p>Genau, schliesslich müssen die 3 Objekte irgendwie konstruiert werden. Falls sie keinen Standardkonstruktor besitzen, kannst du wie gesagt einen Wert festlegen, mit dem die Objekte initialisiert werden sollen:</p>
<pre><code class="language-cpp">std::vector&lt;T&gt; member(3, T(&quot;hallo&quot;, 47));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1731189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731189</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Jun 2009 18:00:10 GMT</pubDate></item></channel></rss>