<?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[ifstream als member-Variable]]></title><description><![CDATA[<p>Hoi,</p>
<p>meine Projektklasse soll eine Lesemethode erhalten, die sequentiell ein File abarbeiten (nur lesen) kann. Diese soll immer wieder mal aufgerufen werden. Im Grunde wollte ich etwas machen, wie <a href="http://www.dreamincode.net/forums/index.php?s=8056f90c6df25fffa50c96015099b1db&amp;showtopic=67447" rel="nofollow">hier von &quot;gabehabe&quot;</a> vorgestellt. Das Beispiel kann ich auch kompilieren. Bei meinem Code erhalte ich jedoch Fehlermeldungen.</p>
<p>Der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

namespace yamas {
    class Project {
         public:
             unsigned int id;
             Project();
             Project(const std::vector&lt;short unsigned int&gt; &amp;cols,
                     const std::string &amp;ifname);
             ~Project();
         private:
             std::vector&lt;short unsigned int&gt; columns;
             std::string fname; // file name of the input file
             //std::ifstream inputstream;
    };
} // end namespace yamas
</code></pre>
<p>Ich habe alle nicht relevanten Methoden und Variablen entfernt. Das scheint so weit ok, jedoch, wenn ich die Zeile mit dem std::ifstream auskommentiere erhalte ich mit &quot; g++ -o trunk/src/ya_project.o -c -fopenmp -O3 -Wall trunk/src/ya_project.cpp&quot; folgende Fehlermeldung:</p>
<pre><code>/usr/include/c++/4.3/bits/ios_base.h: In copy constructor 'std::basic_ios&lt;char, std::char_traits&lt;char&gt; &gt;::basic_ios(const std::basic_ios&lt;char, std::char_traits&lt;char&gt; &gt;&amp;)':
/usr/include/c++/4.3/iosfwd:52:   instantiated from 'void __gnu_cxx::new_allocator&lt;_Tp&gt;::construct(_Tp*, const _Tp&amp;) [with _Tp = yamas::Project]'
/usr/include/c++/4.3/bits/stl_vector.h:690:   instantiated from 'void std::vector&lt;_Tp, _Alloc&gt;::push_back(const _Tp&amp;) [with _Tp = yamas::Project, _Alloc = std::allocator&lt;yamas::Project&gt;]'
trunk/src/ya_project.cpp:110:   instantiated from here
/usr/include/c++/4.3/bits/ios_base.h:782: error: 'std::ios_base::ios_base(const std::ios_base&amp;)' is private
usw. usw.
</code></pre>
<p>Kann mir jemand erklären wo mein Fehler liegt / wie ich ihn umschiffen kann?</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262133/ifstream-als-member-variable</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 20:49:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262133.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Mar 2010 15:55:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream als member-Variable on Mon, 01 Mar 2010 15:55:31 GMT]]></title><description><![CDATA[<p>Hoi,</p>
<p>meine Projektklasse soll eine Lesemethode erhalten, die sequentiell ein File abarbeiten (nur lesen) kann. Diese soll immer wieder mal aufgerufen werden. Im Grunde wollte ich etwas machen, wie <a href="http://www.dreamincode.net/forums/index.php?s=8056f90c6df25fffa50c96015099b1db&amp;showtopic=67447" rel="nofollow">hier von &quot;gabehabe&quot;</a> vorgestellt. Das Beispiel kann ich auch kompilieren. Bei meinem Code erhalte ich jedoch Fehlermeldungen.</p>
<p>Der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

namespace yamas {
    class Project {
         public:
             unsigned int id;
             Project();
             Project(const std::vector&lt;short unsigned int&gt; &amp;cols,
                     const std::string &amp;ifname);
             ~Project();
         private:
             std::vector&lt;short unsigned int&gt; columns;
             std::string fname; // file name of the input file
             //std::ifstream inputstream;
    };
} // end namespace yamas
</code></pre>
<p>Ich habe alle nicht relevanten Methoden und Variablen entfernt. Das scheint so weit ok, jedoch, wenn ich die Zeile mit dem std::ifstream auskommentiere erhalte ich mit &quot; g++ -o trunk/src/ya_project.o -c -fopenmp -O3 -Wall trunk/src/ya_project.cpp&quot; folgende Fehlermeldung:</p>
<pre><code>/usr/include/c++/4.3/bits/ios_base.h: In copy constructor 'std::basic_ios&lt;char, std::char_traits&lt;char&gt; &gt;::basic_ios(const std::basic_ios&lt;char, std::char_traits&lt;char&gt; &gt;&amp;)':
/usr/include/c++/4.3/iosfwd:52:   instantiated from 'void __gnu_cxx::new_allocator&lt;_Tp&gt;::construct(_Tp*, const _Tp&amp;) [with _Tp = yamas::Project]'
/usr/include/c++/4.3/bits/stl_vector.h:690:   instantiated from 'void std::vector&lt;_Tp, _Alloc&gt;::push_back(const _Tp&amp;) [with _Tp = yamas::Project, _Alloc = std::allocator&lt;yamas::Project&gt;]'
trunk/src/ya_project.cpp:110:   instantiated from here
/usr/include/c++/4.3/bits/ios_base.h:782: error: 'std::ios_base::ios_base(const std::ios_base&amp;)' is private
usw. usw.
</code></pre>
<p>Kann mir jemand erklären wo mein Fehler liegt / wie ich ihn umschiffen kann?</p>
<p>Danke,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1862795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1862795</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Mon, 01 Mar 2010 15:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream als member-Variable on Mon, 01 Mar 2010 16:47:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Die Streamklassen sind nicht kopierbar. Wenn du also eine deiner Klasseninstanzen in einen Vektor einfügen willst, muss ja kopiert werden.<br />
Eine Variante wäre hier den Eingabestream als Zeiger in der Klasse zu halten (oder in einem Smartpointer). Dann mußt du den natürlich im Konstruktor erst erzeugen. Dann musst du natürlich auch Kopierkonstruktor und Zuweisungsoperator implementieren. Wenn du keinen Smartpointer verwendest brauchst du natürlich noch einen Destruktor zum Löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1862828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1862828</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 01 Mar 2010 16:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream als member-Variable on Mon, 01 Mar 2010 16:32:59 GMT]]></title><description><![CDATA[<p>Streams sind (aus gutem Grund) nicht kopierbar. Anscheinend versuchst du aber Objekte deiner Klasse zu kopieren (packst du sie in einen vector? Dazu muss der vector nämlich Kopien erzeugen können). Der Compiler kann aber selber keinen passenden Kopierkonstruktor erzeugen.</p>
<p>Lösung: Überleg dir, wie das Verhalten deiner Klasse im Falle einer Kopie aussehen soll und implementier einen entsprechenden Kopierkonstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1862829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1862829</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 01 Mar 2010 16:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream als member-Variable on Mon, 01 Mar 2010 20:22:58 GMT]]></title><description><![CDATA[<p>Nein, die Objekte sollen nicht kopierbar sein. Aus der Compiler-Message läßt sich für mich aber auch nicht ablesen, daß ein Kopierkonstruktor, der explizite &quot;Nichtkopierbarkeit&quot; ausdrückt, das gewünschte Verhalten direkt umsetzen läßt. Nun, ich werde es einfach mal probieren und ansonsten auf die Zeigervariante umsteigen.</p>
<p>Wie auch immer: Seltsam finde ich, dass sich das verlinkte Beispiel (nach Tippfehlerkorrektur) kompilieren ließ, es bei mir aber die Fehlermeldung gibt, und zwar vor dem Linken. Daher hatte ich halt Hoffnung, daß es einen (direkten) Weg gibt. Ist jetzt das Kompilerverhalten oder meine Hoffnung inkonsequent? <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>Jedenfalls vielen Dank für die Erläuterungen!</p>
<p>Gruß,<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1862977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1862977</guid><dc:creator><![CDATA[MEE]]></dc:creator><pubDate>Mon, 01 Mar 2010 20:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream als member-Variable on Tue, 02 Mar 2010 07:31:20 GMT]]></title><description><![CDATA[<p>Dein Beispiel lässt sich solange kompilieren, wie du keinen Kopierkonstruktor aufrufst. Der wird implizit ja erst dann erzeugt wenn du ihn auch brauchst.<br />
push_back ruft den Kopierkonstruktor auf. Sowas musst du auch getan haben um die von dir gepostete Fehlermeldung zu bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863069</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 02 Mar 2010 07:31:20 GMT</pubDate></item></channel></rss>