<?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[iterator &amp;lt;-&amp;gt; konstruktor konflikt]]></title><description><![CDATA[<p>Ich moechte gerne sowas machen:</p>
<pre><code class="language-cpp">istream_iterator&lt;PointN&gt; pos1(file); // Anfangsiterator auf die Datei 
			istream_iterator&lt;PointN&gt; end; // Enditerator 
			copy(pos1,end,back_inserter(vBasePoints));
</code></pre>
<p>Das tut aber nur, wenn mein Konstruktor der Punkteklasse so aussieht:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	data = new double[3];
	dim = 3;
}
</code></pre>
<p>Mein Defaultkonstruktor sollte aber so aussehen:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	data = NULL;
	dim = 0;
}
</code></pre>
<p>da ich ja nicht bei jedem default punkt speicher anlegen moechte.</p>
<p>Weiss mir da jemand eine Loesung? Kann ich vielleicht den default konstruktor aufrufen und dann eine methode allocate() oder so aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134676/iterator-lt-gt-konstruktor-konflikt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 17:30:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134676.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jan 2006 16:47:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to iterator &amp;lt;-&amp;gt; konstruktor konflikt on Fri, 27 Jan 2006 16:47:19 GMT]]></title><description><![CDATA[<p>Ich moechte gerne sowas machen:</p>
<pre><code class="language-cpp">istream_iterator&lt;PointN&gt; pos1(file); // Anfangsiterator auf die Datei 
			istream_iterator&lt;PointN&gt; end; // Enditerator 
			copy(pos1,end,back_inserter(vBasePoints));
</code></pre>
<p>Das tut aber nur, wenn mein Konstruktor der Punkteklasse so aussieht:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	data = new double[3];
	dim = 3;
}
</code></pre>
<p>Mein Defaultkonstruktor sollte aber so aussehen:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	data = NULL;
	dim = 0;
}
</code></pre>
<p>da ich ja nicht bei jedem default punkt speicher anlegen moechte.</p>
<p>Weiss mir da jemand eine Loesung? Kann ich vielleicht den default konstruktor aufrufen und dann eine methode allocate() oder so aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978255</guid><dc:creator><![CDATA[samo]]></dc:creator><pubDate>Fri, 27 Jan 2006 16:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to iterator &amp;lt;-&amp;gt; konstruktor konflikt on Fri, 27 Jan 2006 18:40:11 GMT]]></title><description><![CDATA[<p>samo schrieb:</p>
<blockquote>
<p>Das tut aber nur, wenn [...]</p>
</blockquote>
<p>Ganz schlechtes Deutsch, daran solltest du noch arbeiten.</p>
<p>Ich tippe einfach mal darauf dass du den &quot;Default-Fall&quot; im op&gt;&gt; und/oder op&lt;&lt; oder sonst wo nicht richtig behandelst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978357</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 27 Jan 2006 18:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to iterator &amp;lt;-&amp;gt; konstruktor konflikt on Fri, 27 Jan 2006 22:18:18 GMT]]></title><description><![CDATA[<p>samo schrieb:</p>
<blockquote>
<p>Mein Defaultkonstruktor sollte aber so aussehen:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	data = NULL;
	dim = 0;
}
</code></pre>
<p>da ich ja nicht bei jedem default punkt speicher anlegen moechte.</p>
<p>Weiss mir da jemand eine Loesung? Kann ich vielleicht den default konstruktor aufrufen und dann eine methode allocate() oder so aufrufen?</p>
</blockquote>
<p>Sicher kann man das. Deine Klasse PointN verfügt sicher über einen operator&gt;&gt;; dieser kann friend von PointN sein, also auch auf die privaten Member wie data zugreifen.</p>
<pre><code class="language-cpp">std::istream&amp; operator&gt;&gt;( std::istream&amp; in, PointN pt )
{
     if( !pt.data )
     {
         pt.data = new double[3];
         pt.dim = 0;
     }
     for( int i = 0; i &lt; pt.dim; ++i )
         in &gt;&gt; pt.data[i];
     retrun in;
}
</code></pre>
<p>Benutze bitte die Initialisierungsliste bei Konstruktoren. In Deinem Fall etwa so</p>
<pre><code class="language-cpp">PointN::PointN()
    : data( 0 )  // NULL ist noch C
    , dim( 0 )
{}
</code></pre>
<p>btw. - hast Du einen Copy-Konstruktor von PointN geschrieben?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978575</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 27 Jan 2006 22:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to iterator &amp;lt;-&amp;gt; konstruktor konflikt on Fri, 27 Jan 2006 23:02:32 GMT]]></title><description><![CDATA[<p>du kannst in deiner point-klasse data ja auch als double data[3] deklarieren anstatt double *data. dann stellt sich das null-zeiger problem nicht mehr und es wäre in jedem falle effizienter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978593</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Fri, 27 Jan 2006 23:02:32 GMT</pubDate></item></channel></rss>