<?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[Datei inerhalb einer Klasse geöffnet lassen]]></title><description><![CDATA[<p>hi!<br />
wir schreiben in der schule grade einen parser/compiler. angefangen haben wir zuerst mit relativ einfachen sachen (nur rechnen und syntaxkontrolle) nun wollen wir PL0 programmieren. bevor ich jedoch damit anfange, wollte ich überhaupt dateien bzw. den code aus einer textdatei einlesen. da ich vorhabe, die weitere programmierung in klassen zu machen, hier meine hauptklasse, in der die textdatei überhaupt eingelesen werden soll.</p>
<pre><code class="language-cpp">class programm{
  public:
        programm(char * dateiname){
		//nur damit mans besser lesen kann
		for(int i=0; i&lt;101;i++)datei_zeile[i]=-1;
		//datei einlese
		fstream code(dateiname,ios::in);
		datei=&amp;code;
		if(!code){
		   cout &lt;&lt; 'F';
		}
		int actual_row = 1;
		//nur platzhalter, damit man datei auslesen kann
		string row_content = &quot;&quot;;
                int pos = 0;
	        //position und zeilen feststellen
                while(code &amp;&amp; actual_row&lt;100){
               	   pos = code.tellg();
                   datei_zeile[actual_row]=pos;
		   code &gt;&gt; row_content;
                   actual_row++;
        	}
        }

        void ausgabe(){
		cout &lt;&lt; &quot;Ausgabe&quot;&lt;&lt;endl;
		string row_content = &quot;&quot;;
                //nur symbolisch
	        int pos=datei_zeile[3];
	        (*datei).seekg(pos);
	        datei &gt;&gt; row_content; 
                cout &lt;&lt; row_content &lt;&lt; endl;
        }

        ~programm(){
                datei-&gt;close();
        }
  private:
        int datei_zeile[100];
        static int zeile;
        fstream *datei;
};
</code></pre>
<p>es liegt an der &quot;verknüpfung&quot; von datei und code. nur wie mach ich die richtig, bzw. wie frage ich &quot;datei&quot; in programm::ausgabe richtig ab?<br />
Randfrage, wie breche ich vernünftig ab, wenn das lesen der datei fehl schlug?</p>
<p>Gruß<br />
marcus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132752/datei-inerhalb-einer-klasse-geöffnet-lassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 17:06:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132752.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jan 2006 19:16:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Thu, 12 Jan 2006 19:16:52 GMT]]></title><description><![CDATA[<p>hi!<br />
wir schreiben in der schule grade einen parser/compiler. angefangen haben wir zuerst mit relativ einfachen sachen (nur rechnen und syntaxkontrolle) nun wollen wir PL0 programmieren. bevor ich jedoch damit anfange, wollte ich überhaupt dateien bzw. den code aus einer textdatei einlesen. da ich vorhabe, die weitere programmierung in klassen zu machen, hier meine hauptklasse, in der die textdatei überhaupt eingelesen werden soll.</p>
<pre><code class="language-cpp">class programm{
  public:
        programm(char * dateiname){
		//nur damit mans besser lesen kann
		for(int i=0; i&lt;101;i++)datei_zeile[i]=-1;
		//datei einlese
		fstream code(dateiname,ios::in);
		datei=&amp;code;
		if(!code){
		   cout &lt;&lt; 'F';
		}
		int actual_row = 1;
		//nur platzhalter, damit man datei auslesen kann
		string row_content = &quot;&quot;;
                int pos = 0;
	        //position und zeilen feststellen
                while(code &amp;&amp; actual_row&lt;100){
               	   pos = code.tellg();
                   datei_zeile[actual_row]=pos;
		   code &gt;&gt; row_content;
                   actual_row++;
        	}
        }

        void ausgabe(){
		cout &lt;&lt; &quot;Ausgabe&quot;&lt;&lt;endl;
		string row_content = &quot;&quot;;
                //nur symbolisch
	        int pos=datei_zeile[3];
	        (*datei).seekg(pos);
	        datei &gt;&gt; row_content; 
                cout &lt;&lt; row_content &lt;&lt; endl;
        }

        ~programm(){
                datei-&gt;close();
        }
  private:
        int datei_zeile[100];
        static int zeile;
        fstream *datei;
};
</code></pre>
<p>es liegt an der &quot;verknüpfung&quot; von datei und code. nur wie mach ich die richtig, bzw. wie frage ich &quot;datei&quot; in programm::ausgabe richtig ab?<br />
Randfrage, wie breche ich vernünftig ab, wenn das lesen der datei fehl schlug?</p>
<p>Gruß<br />
marcus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964911</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Thu, 12 Jan 2006 19:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Thu, 12 Jan 2006 21:47:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Freeze2006 schrieb:</p>
<blockquote>
<p>Randfrage, wie breche ich vernünftig ab, wenn das lesen der datei fehl schlug?</p>
<p>Gruß<br />
marcus</p>
</blockquote>
<p>Du könntest es mit &quot;try&quot; und &quot;catch&quot; probieren. Dazu folgender kurzer Beitrag:</p>
<p><a href="http://www.kharchi.de/" rel="nofollow">http://www.kharchi.de/</a></p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965030</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Jan 2006 21:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 00:28:41 GMT]]></title><description><![CDATA[<p>Du könntest es mit &quot;try&quot; und &quot;catch&quot; probieren. Dazu folgender kurzer Beitrag:</p>
<p><a href="http://www.kharchi.de/" rel="nofollow">http://www.kharchi.de/</a></p>
<p>chrische[/quote]<br />
Danke! das sieht sehr gut aus! werd ich mich morgen mal drum kümmern. wie siehts mit der datei aus?</p>
<p>der sinn soll ja sein, dass man die zeile während des ablaufs weitersetzt und es sich damit erspart, den gesamten code vorher in eine oder mehrere variablen zu speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965095</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Fri, 13 Jan 2006 00:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 02:06:49 GMT]]></title><description><![CDATA[<p>mach das so, ohne zeiger:</p>
<pre><code class="language-cpp">class Programm
{
  Programm(const char* name): datei(name)
  {
  }

  ifstream datei;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/965108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965108</guid><dc:creator><![CDATA[DrGreenthumb]]></dc:creator><pubDate>Fri, 13 Jan 2006 02:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 06:15:01 GMT]]></title><description><![CDATA[<p>hi!<br />
ok, dass funktioniert bedingt, denn nach beenden des programms, erhalte ich ne zugriffsverletzung und es liegt am destruktor des fstreams.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965119</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Fri, 13 Jan 2006 06:15:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 09:50:25 GMT]]></title><description><![CDATA[<p>Du arbeitest mit Daten, die dir nicht wirklich gehören und das ist immer gefährlich.</p>
<p>Ein paar Beispiele:</p>
<pre><code class="language-cpp">for(int i=0; i&lt;101;i++)datei_zeile[i]=-1;
</code></pre>
<p>datei_zeile hat nur 100 Elemente (0..99), also schreibst du über das Array-Ende hinaus.</p>
<pre><code class="language-cpp">fstream code(dateiname,ios::in);
datei=&amp;code;
</code></pre>
<p>code wird am Ende des Destruktors wieder geschlossen (und gelöscht), damit zeigt dein Dateizeiger ins Nirvana.</p>
<p>(wozu du das statische Element &quot;zeile&quot; brauchst, ist mir übrigens nicht ganz klar)</p>
<p>Richtig würde es z.B. so aussehen:<br />
[cpp]class Programm<br />
{<br />
public:<br />
Programm(char* name) : datei(name)<br />
{<br />
//hier landet die Initialisierung deines Zeilen-Arrays<br />
}</p>
<p>//Destruktor brauchst du nicht, der automatisch generierte Dtor schließt auch die Datei</p>
<p>private:<br />
ifstream datei;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965255</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 13 Jan 2006 09:50:25 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 21:02:28 GMT]]></title><description><![CDATA[<p>ok, danke!<br />
noch ne nachfrage dazu, ich mach es jetzt so, dass ich die datei öffters öffne, da der stream scheinbar nicht geöffnet bleibt.</p>
<p>dazu nen bsp:<br />
[cpp]<br />
class Programm{<br />
public:<br />
get_line(fstream &amp; datei){<br />
//..Ausgabe../<br />
}</p>
<p>buffer(){<br />
fstream datei;<br />
datei.open(&quot;test.txt&quot;);<br />
get_line(datei);<br />
}<br />
}</p>
<p>wieso erhalte ich nen linkerfehler beim aufruf von get_line?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/966011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966011</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Fri, 13 Jan 2006 21:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 21:16:01 GMT]]></title><description><![CDATA[<p>Freeze2006 schrieb:</p>
<blockquote>
<p>ok, danke!<br />
noch ne nachfrage dazu, ich mach es jetzt so, dass ich die datei öffters öffne, da der stream scheinbar nicht geöffnet bleibt.</p>
<p>dazu nen bsp:<br />
[cpp]<br />
class Programm{<br />
public:<br />
get_line(fstream &amp; datei){<br />
//..Ausgabe../<br />
}</p>
<p>buffer(){<br />
fstream datei;<br />
datei.open(&quot;test.txt&quot;);<br />
get_line(datei);<br />
}<br />
}</p>
<p>wieso erhalte ich nen linkerfehler beim aufruf von get_line?</p>
</blockquote>
<p>Wie sieht denn die Fehlermeldung aus?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/966019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966019</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 13 Jan 2006 21:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 21:57:10 GMT]]></title><description><![CDATA[<p>borland c++ builder 6 sagt dazu:</p>
<pre><code>[C++ Warnung] compiler.cpp(91): W8012 Vergleich von signed- und unsigned-Werten
[Linker Fehler] Unresolved external 'programm::get_line(int, _STL::basic_fstream&lt;char, _STL::char_traits&lt;char&gt; &gt;&amp;)' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\MARCUS\EIGENE DATEIEN\C++\COMPILER_V0.01\COMPILER.OBJ
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/966041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966041</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Fri, 13 Jan 2006 21:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 22:02:28 GMT]]></title><description><![CDATA[<p>Dann schick mal die Funktion get_line rüber.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/966049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966049</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 13 Jan 2006 22:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Datei inerhalb einer Klasse geöffnet lassen on Fri, 13 Jan 2006 22:15:47 GMT]]></title><description><![CDATA[<p>hi!<br />
sry, war irgendwo nen syntax fehler, hab nen bisle rumgespielt, und weg wars..<br />
also so funktionierts zumindest!</p>
<p>THX!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/966059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/966059</guid><dc:creator><![CDATA[Freeze2006]]></dc:creator><pubDate>Fri, 13 Jan 2006 22:15:47 GMT</pubDate></item></channel></rss>