<?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[Klasse die aus einer Datei Daten einließt]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe hier eine Aufgabe die ich gerne lösen würde, könnt ihr mir dazu etwas unter die Arme greifen?<br />
<strong>Aufgabenstellung:</strong></p>
<blockquote>
<p>a)<br />
Definieren Sie die Klasse testreihe mit den Datenelementen<br />
-Anzahl n der Zahlenpaare<br />
-Zeiger auf die x-Werte px und Zeiger auf die y-Werte py</p>
<p>und mit<br />
-dem Parameter-Konstruktor testreihe(char* dateiname), (in dem auch n zu bestimmen ist)<br />
-dem Kopier-Konstruktor,<br />
-dem Destruktor,<br />
-der Methode berechne_r und<br />
-der Methode ausgabe, die den Korrelationskoeffizienten r, die Anzahl n und die ersten 4 Wertepaare schreibt.</p>
<p>b) Definieren Sie alle Methoden von a)</p>
</blockquote>
<p><strong>Die Datei TESTREIHE.TXT sieht so aus:</strong></p>
<blockquote>
<p>38,5 148,08<br />
33,6 103,51<br />
41,2 143,76<br />
46,4 171,27<br />
...<br />
35,9 128,56<br />
37,9 142,79<br />
37,7 141,54</p>
</blockquote>
<p><strong>Mein Lösungsansatz:</strong></p>
<pre><code class="language-cpp">//Klassendefinition
class testreihe
{
protected:
	int n;
	float* px,py;

public:
	testreihe();
	testreihe(char* dateiname);
	testreihe(const testreihe&amp; t);
	~testreihe();
	void berechne_r();
	void ausgabe();

};
</code></pre>
<pre><code class="language-cpp">////Definition der Konstruktoren
//Standardkonstruktor
testreihe::testreihe():n(0),px(NULL),py(NULL){}
//Parameterkonstruktor: ist noch nicht vollkommen richtig, blos was ist da falsch?
testreihe::testreihe(char* dateiname)
{
	int n=0;
	ifstream input;
	input.open(dateiname);
	if(!input) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;

	double temp;
	while(input&gt;&gt;temp) n++;
	input.close();
	cout &lt;&lt; n;
}
//Kopierkonstruktor
testreihe::testreihe(const testreihe&amp; t)
{
	n=t.n;
// vorher hatte ich immer pname oder so, da wusste ich was ich machen muss um den cstring zu kopieren:
// pname=new char[strlen(name)+1]; strcpy(pname,name);
//Doch wie mache ich es in diesem Fall?
//vllt. so??
	px=t.px;
	py=t.py;
}

//Destruktor
testreihe::~testreihe(){}
</code></pre>
<p>Wenn die Klasse richtig definiert wurde soll in der main Funktion das ausgeführt werden:</p>
<pre><code class="language-cpp">int main()
     {
		testreihe messung1(&quot;TESTREIHE.TXT&quot;); 
		testreihe messung2 = messung1;
		messung2.ausgabe();
		return 0;
     }
</code></pre>
<p>vielen dank für euren Rat</p>
<p>gruß The architect</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230041/klasse-die-aus-einer-datei-daten-einließt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 11:08:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230041.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Dec 2008 14:29:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 14:31:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe hier eine Aufgabe die ich gerne lösen würde, könnt ihr mir dazu etwas unter die Arme greifen?<br />
<strong>Aufgabenstellung:</strong></p>
<blockquote>
<p>a)<br />
Definieren Sie die Klasse testreihe mit den Datenelementen<br />
-Anzahl n der Zahlenpaare<br />
-Zeiger auf die x-Werte px und Zeiger auf die y-Werte py</p>
<p>und mit<br />
-dem Parameter-Konstruktor testreihe(char* dateiname), (in dem auch n zu bestimmen ist)<br />
-dem Kopier-Konstruktor,<br />
-dem Destruktor,<br />
-der Methode berechne_r und<br />
-der Methode ausgabe, die den Korrelationskoeffizienten r, die Anzahl n und die ersten 4 Wertepaare schreibt.</p>
<p>b) Definieren Sie alle Methoden von a)</p>
</blockquote>
<p><strong>Die Datei TESTREIHE.TXT sieht so aus:</strong></p>
<blockquote>
<p>38,5 148,08<br />
33,6 103,51<br />
41,2 143,76<br />
46,4 171,27<br />
...<br />
35,9 128,56<br />
37,9 142,79<br />
37,7 141,54</p>
</blockquote>
<p><strong>Mein Lösungsansatz:</strong></p>
<pre><code class="language-cpp">//Klassendefinition
class testreihe
{
protected:
	int n;
	float* px,py;

public:
	testreihe();
	testreihe(char* dateiname);
	testreihe(const testreihe&amp; t);
	~testreihe();
	void berechne_r();
	void ausgabe();

};
</code></pre>
<pre><code class="language-cpp">////Definition der Konstruktoren
//Standardkonstruktor
testreihe::testreihe():n(0),px(NULL),py(NULL){}
//Parameterkonstruktor: ist noch nicht vollkommen richtig, blos was ist da falsch?
testreihe::testreihe(char* dateiname)
{
	int n=0;
	ifstream input;
	input.open(dateiname);
	if(!input) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;

	double temp;
	while(input&gt;&gt;temp) n++;
	input.close();
	cout &lt;&lt; n;
}
//Kopierkonstruktor
testreihe::testreihe(const testreihe&amp; t)
{
	n=t.n;
// vorher hatte ich immer pname oder so, da wusste ich was ich machen muss um den cstring zu kopieren:
// pname=new char[strlen(name)+1]; strcpy(pname,name);
//Doch wie mache ich es in diesem Fall?
//vllt. so??
	px=t.px;
	py=t.py;
}

//Destruktor
testreihe::~testreihe(){}
</code></pre>
<p>Wenn die Klasse richtig definiert wurde soll in der main Funktion das ausgeführt werden:</p>
<pre><code class="language-cpp">int main()
     {
		testreihe messung1(&quot;TESTREIHE.TXT&quot;); 
		testreihe messung2 = messung1;
		messung2.ausgabe();
		return 0;
     }
</code></pre>
<p>vielen dank für euren Rat</p>
<p>gruß The architect</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632906</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 14:31:13 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 14:57:06 GMT]]></title><description><![CDATA[<p>Also erstens mal sind Mehrfachdeklarationen in einer Zeile böse. Zwar aus folgendem Grund:</p>
<pre><code class="language-cpp">float* px,py;  // Hier deklarierst du NICHT zwei Zeiger, sondern ein float* und ein float.
</code></pre>
<p>Bei deinem Konstruktor mit einem <code>char*</code> -Parameter lässt du die Member uninitialisiert. Das ist nicht nur nicht gut, sondern auch gefährlich, vor allem, wenn später darauf zugegriffen wird (z.B. in <code>ausgabe()</code> ). Also mindestens auf 0 setzen.</p>
<p>Zudem sollen doch im Konstruktor die Zahlen gerade eingelesen und abgespeichert werden, oder? Das machst du jedenfalls nicht. Dann wäre es nämlich auch ein wenig klarer, was du im Kopierkonstruktor tun müsstest.</p>
<pre><code class="language-cpp">// Konstruktor mit char*-Parameter
testreihe::testreihe(char* dateiname)
{
    // öffne, lese, setze n auf Anzahl Werte
    px = new float[n];
    py = new float[n];
    // dynamische Arrays px und py füllen (Datei nochmals lesen)
}

// Kopierkonstruktor
testreihe::testreihe(const testreihe&amp; origin)
: n(origin.n) // gleiche Anzahl Elemente in Initialisierungsliste übernehmen
{
    px = new float[n];    // hier Speicher NEU anfordern
    py = new float[n];
    // Elemente in den Arrays von origin in diese Instanz kopieren, z.B.
    // mit std::copy() oder in einer Schleife
}
</code></pre>
<p>Du solltest darauf achten, dass du im Destruktor den Speicher mit <code>delete[]</code> ordentlich freigibst. Du darfst ausserdem keine Zuweisungen mit = durchführen, weil du keinen Zuweisungsoperator überladen hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632922</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 14:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 19:00:21 GMT]]></title><description><![CDATA[<p>Nexus vielen dank für deine Antwort,</p>
<p>Ich habe das nun mal umgesetzt, was du mir erläutert hast.</p>
<p>Kannst du nochmal kurz drüber schauen ob die Konstruktoren nun so stimmen?</p>
<pre><code class="language-cpp">class testreihe
{
protected:
	int n;
	float* px;
	float* py;

public:
	testreihe();
	testreihe(char* dateiname);
	testreihe(const testreihe&amp; t);
	~testreihe();
	void berechne_r();
	void ausgabe();

};
</code></pre>
<pre><code class="language-cpp">testreihe::testreihe():n(0),px(NULL),py(NULL){}
testreihe::testreihe(char* dateiname):n(0),px(NULL),py(NULL)
{
	//Anzahl der Wertepaare bestimmen
	ifstream input;
	input.open(dateiname);
	if(!input) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;
	float temp;
	while(input&gt;&gt;temp) n++;
	input.close();

	//Werte in px und py schreiben
	ifstream input2;
	input2.open(dateiname);
	if(!input) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;
	px=new float[n];
	py=new float[n];
	for(int i=0; i&lt;n; i++)
		{	
			input2 &gt;&gt; px;
			input2 &gt;&gt; py;
		}
	input2.close();
}
testreihe::testreihe(const testreihe&amp; t)
{
	n=t.n;
	px=new float[n];
	py=new float[n];
	for(int l=0; l&lt;t.n; l++)
		{
			px[l]=t.px[l];
			py[l]=t.py[l];
		}
}

testreihe::~testreihe()
{
	delete[] px;
	delete[] py;
}
</code></pre>
<p>Wenn dieser Teil dann korrekt ist dann wage ich mich an die Methoden berechne_r(); und ausgabe();</p>
<p>Ps: Es gibt ein problem mit dem einlesen der Float Werte</p>
<p>The architect schrieb:</p>
<blockquote>
<p>Fehler 1 error C2679: Binärer Operator '&gt;&gt;': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'float *' akzeptiert (oder keine geeignete Konvertierung möglich) c:\users\archi\documents\visual studio 2008\projects\testreihe\testreihe\testreihe.cpp 44</p>
</blockquote>
<p>In der Aufgabenstellung ist aber keine &gt;&gt; operator Überladung verlangt, wie kann ich dieses Problem beheben?</p>
<p>//edit: Bearbeitet, denn es fehlte ein &gt;&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633050</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 19:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 18:50:53 GMT]]></title><description><![CDATA[<p>Nimm für einen C-String const char*.</p>
<blockquote>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; t)
</code></pre>
</blockquote>
<p>Auch hier brauchst du eine Initialisierungsliste.</p>
<p>Dann würde ich ( persönliche Preferenz ) nicht NULL benutzen, sondern auch 0.</p>
<p>Du willst ja keinen Zeiger auf float einlesen, sondern das float selbst.</p>
<pre><code class="language-cpp">float* f = new float;
input &gt;&gt; *f;
delete f;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1633056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633056</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 19 Dec 2008 18:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 18:55:26 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<pre><code class="language-cpp">input2  px;
            input2 &gt;&gt; py;
</code></pre>
</blockquote>
<p>Also erstens mal fehlt bei der oberen Anweisung ein &gt;&gt;. Zweitens erwartet der &gt;&gt;-Operator hier ein <code>float</code> und keinen Zeiger auf <code>float</code> . Das ist auch der Grund für deinen Fehler. Du musst also auf das jeweilige Element zugreifen</p>
<pre><code class="language-cpp">input2 &gt;&gt; px[i];
input2 &gt;&gt; py[i];

input2 &gt;&gt; px[i] &gt;&gt; py[i];  // in einer Zeile
</code></pre>
<p>Zudem:</p>
<p>The architect schrieb:</p>
<blockquote>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; t)
{
	n=t.n;            // das hier würde ich in die Initialisierungsliste verlagern
}
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1633058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633058</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 18:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 19:39:35 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<p>Ich habe hier eine Aufgabe die ich gerne lösen würde, könnt ihr mir dazu etwas unter die Arme greifen?<br />
<strong>Aufgabenstellung:</strong></p>
<blockquote>
<p>a)<br />
Definieren Sie die Klasse testreihe mit den Datenelementen<br />
-Anzahl n der Zahlenpaare<br />
-Zeiger auf die x-Werte px und Zeiger auf die y-Werte py</p>
<p>und mit<br />
-dem Parameter-Konstruktor testreihe(char* dateiname), (in dem auch n zu bestimmen ist)<br />
-dem Kopier-Konstruktor,<br />
-dem Destruktor,<br />
-der Methode berechne_r und<br />
-der Methode ausgabe, die den Korrelationskoeffizienten r, die Anzahl n und die ersten 4 Wertepaare schreibt.</p>
<p>b) Definieren Sie alle Methoden von a)</p>
</blockquote>
</blockquote>
<p>darf ich mal fragen, wo diese Aufgabenstellung herkommt. Uni, FH, Berufsschule .. anderes?</p>
<p>:xmas2: Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633083</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 19:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 20:02:32 GMT]]></title><description><![CDATA[<p>Die Aufgabe stammt aus einer Fachhochschule.<br />
Darf man fragen wieso dich dies interessiert?</p>
<p><strong>Zu der Aufgabe:</strong></p>
<p>Ich habe versucht nun eure beiden (drakon und Nexus) Vorschläge zu integrieren, aber es klappt noch nicht. ( nur bezogen auf das Einlesen)<br />
Ich komme auch leider nicht drauf, könnt ihr mir nochmal nen Anhaltspunkt geben?<br />
Bitte nicht das Ergebnis sagen, nur darauf hin leiten.</p>
<p>Hier habe ich es nun so gemacht wie Drakon beschrieben hat:</p>
<pre><code class="language-cpp">float* px = new float[n];
	float* py = new float[n];
	for(int i=0; i&lt;n; i++)
		input2 &gt;&gt; *px[i] &gt;&gt; *py[i];
</code></pre>
<p>ich könnte dies evtl. auf andere Weise lösen indem ich den Zeiger um 1Stelle immer verschiebe. px++;<br />
Aber dies ist eher nicht so gut da ich am schluss den Zeiger dann wieder korrigieren müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633092</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 20:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 20:21:17 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<p>Die Aufgabe stammt aus einer Fachhochschule.<br />
Darf man fragen wieso dich dies interessiert?</p>
</blockquote>
<p>Ääh - ich arbeite gerade an einem Vortrag über guten und schlechten Stil bzw. Design und die richtige Wahl von Schnittstellen. Das Thema steht noch nicht so genau fest. Und diese Aufgabenbeschreibung deckt sich fast zu 100% mit meinem Negativ-Beispiel - also wie man es genau nicht machen soll. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>:xmas2: Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633105</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 20:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 20:31:41 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<p><strong>Zu der Aufgabe:</strong></p>
<p>Ich habe versucht nun eure beiden (drakon und Nexus) Vorschläge zu integrieren, aber es klappt noch nicht. ( nur bezogen auf das Einlesen)<br />
Ich komme auch leider nicht drauf, könnt ihr mir nochmal nen Anhaltspunkt geben?<br />
Bitte nicht das Ergebnis sagen, nur darauf hin leiten.</p>
<p>Hier habe ich es nun so gemacht wie Drakon beschrieben hat:</p>
<pre><code class="language-cpp">float* px = new float[n];
	float* py = new float[n];
	for(int i=0; i&lt;n; i++)
		input2 &gt;&gt; *px[i] &gt;&gt; *py[i];
</code></pre>
</blockquote>
<p>Überlege durch welche Operatoren [] bzw. * welcher Typ in was umgewandelt wird.<br />
Schau Dir nochmal genau das letzte Posting von Nexus an - da steht die Lösung.</p>
<p>The architect schrieb:</p>
<blockquote>
<p>ich könnte dies evtl. auf andere Weise lösen indem ich den Zeiger um 1Stelle immer verschiebe. px++;<br />
Aber dies ist eher nicht so gut da ich am schluss den Zeiger dann wieder korrigieren müsste.</p>
</blockquote>
<p>Das kannst Du schon so machen, wenn Du vorher eine Kopie der Zeiger anlegst und die Kopie zum iterieren benutzt.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633109</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 20:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 20:37:56 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>ich arbeite gerade an einem Vortrag über guten und schlechten Stil bzw. Design und die richtige Wahl von Schnittstellen.</p>
</blockquote>
<p>Veröffentlichst du den Vortrag, wenn er fertig ist? Hört sich wirklich interessant!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633112</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 19 Dec 2008 20:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 20:58:16 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>ich arbeite gerade an einem Vortrag über guten und schlechten Stil bzw. Design und die richtige Wahl von Schnittstellen.</p>
</blockquote>
<p>Veröffentlichst du den Vortrag, wenn er fertig ist? Hört sich wirklich interessant!</p>
</blockquote>
<p>Normal nicht, da es sich um eine firmeninterne Veranstaltung handelt.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633119</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 20:58:16 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 21:19:03 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Zweitens erwartet der &gt;&gt;-Operator hier ein float und keinen Zeiger auf float.</p>
</blockquote>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Überlege durch welche Operatoren [] bzw. * welcher Typ in was umgewandelt wird.<br />
Schau Dir nochmal genau das letzte Posting von Nexus an - da steht die Lösung.</p>
</blockquote>
<p>Also damit der operator&gt;&gt; damit arbeiten kann muss ich ihm einen float und nicht einen *float übergeben.<br />
Momentan bekommt er durch px[i] einen Zeiger.<br />
px ist mein Zeiger auf den Arrayanfang, mit *px komme ich auf den Bereich auf den der Zeiger zeigt. ( Dereferenzieren).</p>
<p>Ich kann leider nicht genau beurteilen ob meine jetztige Lösung stimmt, da ein Laufzeitfehler auftritt beim debuggen.</p>
<p>Fehler schrieb:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x68ef31ea (msvcr90d.dll) in testreihe.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xccccccc0.</p>
</blockquote>
<pre><code class="language-cpp">float* px = new float[n];
float* py = new float[n];
    for(int i=0; i&lt;n; i++)
        input2 &gt;&gt; *(px+i) &gt;&gt; *(py+i);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1633123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633123</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 21:19:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 21:29:33 GMT]]></title><description><![CDATA[<p>Ne. Du hast keinen Zeiger. Du hast ein Array von floats und mit dem []-Operator kommst du auf die richtigen Werte..</p>
<pre><code class="language-cpp">float a[5];
std::cout &lt;&lt; a [ 0 ];
std::cin &gt;&gt; a [ 1 ];
</code></pre>
<p>War ein wenig ungeschickt von mir das Beispiel mit Zeigern zu machen. Das war vlt. die Verwirrung. (auch wenn es schlussendlich das gleiche ist. ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633124</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 19 Dec 2008 21:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 21:30:31 GMT]]></title><description><![CDATA[<p>Deine Lösung stimmt.</p>
<p>Jedoch ist</p>
<pre><code class="language-cpp">*(px+i)
</code></pre>
<p>genau äquivalent zu</p>
<pre><code class="language-cpp">px[i]
</code></pre>
<p>Mit dem Index-Operator [] wird also auch dereferenziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633125</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Dec 2008 21:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 22:00:37 GMT]]></title><description><![CDATA[<p>Okay dann ist also die Definition des char* Parameterkonstruktors auch richtig</p>
<pre><code class="language-cpp">testreihe::testreihe():n(0),px(0),py(0){}
testreihe::testreihe(char* dateiname):n(0),px(0),py(0)
{
	//Anzahl der Wertepaare bestimmen
	ifstream input;
	input.open(dateiname);
	if(!input) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;
	float temp;
	while(input&gt;&gt;temp) n++;
	input.close();

	//Werte in px und py schreiben
	ifstream input2;
	input2.open(dateiname);
	if(!input2) cerr &lt;&lt; &quot;FAILURE: File not opened&quot;;
	float* px = new float[n];
	float* py = new float[n];
    for(int i=0; i&lt;n; i++)
        input2 &gt;&gt; px[i] &gt;&gt; py[i];	

	input2.close();
}
</code></pre>
<p>Beim Kopierkonstruktor taucht noch ein Fehler auf.</p>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; t):n(t.n)
{
	float* px = new float[n];
	float* py = new float[n];

	for(int i=0; i&lt;n; i++)
	{
		px[i]=t.px[i];
		py[i]=t.py[i];
	}
}
</code></pre>
<p>Fehler schrieb:</p>
<blockquote>
<p>Unbehandelte Ausnahme bei 0x00c41a52 in testreihe.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.</p>
</blockquote>
<p>Jemand eine Ahnung was ich hier wieder falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633130</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 22:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 22:08:56 GMT]]></title><description><![CDATA[<p>Ich würde mal sagen, dass t.px[] ungültig, weil leer ist.<br />
Schau dir das mal mit dem Debugger an, dann siehst dus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633132</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 19 Dec 2008 22:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 22:16:09 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<p>Jemand eine Ahnung was ich hier wieder falsch mache?</p>
</blockquote>
<p>Im Kopierkonstruktor erstmal nichts, Du solltest noch abfragen, ob t.n==0 ist. Falls ja kann man das Codesegment überspringen. Außerdem solltest Du die Zeiger immer in der Initialisierungsliste mit 0 initialisieren.<br />
Der Fehler kann z.B. dann auftreten, wenn n&gt;0 ist, aber die Zeiger px,py noch 0 sind.</p>
<p>Im Konstruktor zählt n die Anzahl der Zahlen, aber Du brauchst die Anzahl der Paare! Aber das löst den von Dir genannten Fehler nicht aus.</p>
<p>:xmas2: Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633134</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 22:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 22:24:23 GMT]]></title><description><![CDATA[<p>The architect schrieb:</p>
<blockquote>
<p><strong>Die Datei TESTREIHE.TXT sieht so aus:</strong></p>
<blockquote>
<p>38,5 148,08<br />
33,6 103,51<br />
41,2 143,76<br />
46,4 171,27<br />
...<br />
35,9 128,56<br />
37,9 142,79<br />
37,7 141,54</p>
</blockquote>
</blockquote>
<p>Wenn die Zahlen mit Komma als Dezimaltrenner versehen sind, so muss man die entsprechende locale setzen. Im MS-Umfeld (z.B. VC8) sieht das etwa so aus:</p>
<pre><code class="language-cpp">ifstream datei(&quot;TESTREIHE.TXT&quot;);
    datei.imbue( locale(&quot;german&quot;) ); // in der Folge werden Zahlen mit Komma als Dezimaltrennzeichen gelesen
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633135</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 19 Dec 2008 22:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Fri, 19 Dec 2008 22:52:20 GMT]]></title><description><![CDATA[<p>Danke Werner, das mit dem Einlesen klappt jetzt wunderbar.<br />
er ließt nun alle Werte ein, diese Anzahl nehme ich dann einfach durch 2</p>
<p>( mein File hat z.b 8 Werte)</p>
<p>Der Fehler von dem ich gesprochen habe, besteht aber noch immer.</p>
<p>Das was du vorhin geschrieben hast habe ich nun so umgesetzt:</p>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; t):n(t.n),px(0),py(0)
{
	if(t.n!=0)
		{
			float* px = new float[n];
			float* py = new float[n];
			for(int i=0; i&lt;n/2; i++)
			{
				px[i]=t.px[i];
				py[i]=t.py[i]; 
			}
		}
}
</code></pre>
<p>Falls also n=0 ist wird das Codesegement übersprungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633141</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Fri, 19 Dec 2008 22:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Sat, 20 Dec 2008 13:56:36 GMT]]></title><description><![CDATA[<blockquote>
<p>-Anzahl n der Zahlen<strong>paare</strong></p>
</blockquote>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; rhs)
   : n(t.n), px(0), py(0)
{
    if(! n)//n == 0
         return;

    float* px = new float[n];
    float* py = new float[n];
    for(int i=0; i != n; ++i)
    {
         px[i]=rhs.px[i];
         py[i]=rhs.py[i]; 
    }
}
</code></pre>
<p>so kann man das doch schon mal lesen... dann gibts noch ne schöne stl-funktion:</p>
<pre><code class="language-cpp">testreihe::testreihe(const testreihe&amp; rhs)
   : n(t.n), px(0), py(0)
{
    if(! n)//n == 0
         return;

    float* px = new float[n];
    float* py = new float[n];
    std::copy(px, px+n, rhs.px); //von rhs.px n werte nach px kopieren
    std::copy(py, py+n, rhs.py); //von rhs.py n werte nach py kopieren
}
</code></pre>
<p>Als kleine Anmerkung: Für Pointer würde ich im Übrigen nicht 0 nehmen - ich würd nullptr nehmen und das zunächst als NULL definen oder gleich den workaround bis zum nächsten standard nehmen, aber das sei nur mal so nebenebbei erwähnt</p>
<pre><code class="language-cpp">testreihe::testreihe(const char* dateiname) //const zeigt dem aufrufenden an, dass seine zeichenkette nach dem funktionsaufruf die gleiche ist, wie zuvor
   n(0), px(0), py(0)
{
    //Anzahl der Wertepaare bestimmen
    std::ifstream input;
    input.exceptions (std::ifstream::eofbit | std::ifstream::failbit | std::ifstream::badbit); //es werden exceptions geworfen, falls etwas schief geht - die fangen wir aber zunächst mit dem try / catch selbst auf und werfen ne andere exception weiter:
    try
    {
      input.open(dateiname);
      float temp;
      for(float temp; !input.eof(); ++n)
          input &gt;&gt; temp;
      input.seekg(std::ios_base::beg); //wir nehmen den gleichen stream wieder - brauchen ja keinen anderen...

      if(!n)
         return; //evtl fehlermeldung?

      //Werte in px und py schreiben
      float* px = new float[n];
      float* py = new float[n];
      for(int i=0; i != n; ++i)
          input &gt;&gt; px[i] &gt;&gt; py[i];
   }
   catch (...)//evtl TODO ^^
   {
     //TODO
   }
}
</code></pre>
<p>Sehr nützliche Referenz (vor allem zu Streams nutze ich sie auch sehr gerne ^^):<br />
<a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a></p>
<p>ich würd ja gern weitermachen aber ich geh dann erstmal frühstücken <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>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633296</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 20 Dec 2008 13:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Sat, 20 Dec 2008 14:29:49 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>so kann man das doch schon mal lesen... dann gibts noch ne schöne stl-funktion:</p>
<pre><code class="language-cpp">std::copy(px, px+n, rhs.px); //von rhs.px n werte nach px kopieren
    std::copy(py, py+n, rhs.py); //von rhs.py n werte nach py kopieren
</code></pre>
</blockquote>
<p>Die &quot;schöne STL-Funktion&quot; wurde hier aber falsch angewandt. <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>Richtig wäre Folgendes, du willst schliesslich von <code>rhs</code> nach <code>*this</code> kopieren:</p>
<pre><code class="language-cpp">std::copy(rhs.px, rhs.px + n, px);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1633300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633300</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 20 Dec 2008 14:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse die aus einer Datei Daten einließt on Sun, 21 Dec 2008 19:59:26 GMT]]></title><description><![CDATA[<p>vielen dank an alle die mir bei dieser Aufgabe geholfen haben.<br />
Ich habe das Programm nun fertig</p>
<p>gruß architect</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633772</guid><dc:creator><![CDATA[The architect 0]]></dc:creator><pubDate>Sun, 21 Dec 2008 19:59:26 GMT</pubDate></item></channel></rss>