<?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[Importer:Error:WasEmpty]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>in meinen Hausaufgaben stehe ich gerade vor folgendem Problem:</p>
<p>Erstmal die Aufgabenstellung:<br />
&quot;Überladen Sie operator[] der Matrix-Klasse gemäß double* operator[](int i), so dass die jeweilige Zeile v[i] der Matrix in Form eines Arrays (Zeiger!) zurückgegeb en wird. Auf dieses kann dann wiederum mit einem Index zugegrien werden; insgesamt liefert der Aufruf von m[i][j] dann ein einzelnes Element in Zeile i, Spalte j der Matrix m.&quot;</p>
<p>In der Variante, die keinen Compilierungsfehler produziert, erscheint beim Ausführen des Programms &quot;Speicherzugriffsfehler (Speicherabzug geschrieben)&quot;.</p>
<p>Hier noch mein derzeitiger Code (sinnvoll gekürzt):</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;

using namespace std;

class Matrix
{
	private:
    	double v[3][3];
  	public:
    	Matrix()
    	{
      		for (int i = 0; i &lt; 3; ++i)
		{	
			for (int j = 0; j &lt; 3; ++j)
				v[i][j] = 0;
		}
    	}
    	Matrix(const double aIn[3][3])
    	{
      		for (int i = 0; i &lt; 3; ++i)
		{	
			for (int j = 0; j &lt; 3; ++j)
				v[i][j] = aIn[i][j];
		}
    	}
	double* operator[](const int i)
	{
		double *a[3];
		for (int j = 0; j &lt; 3; ++j)
			*a[j] = v[i][j];
		//return a;
	}

int main()
{

		const double a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    		Matrix m(a);
    		cout  &lt;&lt; m[1][1] &lt;&lt; m[2][1] &lt;&lt; m[3][1] &lt;&lt; endl; // muesste &quot;1 4 7&quot; ausspucken
}
</code></pre>
<p>In einer anderen Variante wird der Speicherort der Variable angegeben (0x98236)<br />
Könnt ihr vielleicht meinen Denk-/Programmierfehler finden?</p>
<p>Vielen Dank!</p>
<p>Grüße,<br />
Basti</p>
<p>PS: Ich arbeite momentan mit Ubuntu 12.04 LTS und GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321553/importer-error-wasempty</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 03:31:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321553.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Nov 2013 20:53:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 15 Nov 2013 20:55:51 GMT]]></title><description><![CDATA[<p>Hallo ihr Lieben,</p>
<p>in meinen Hausaufgaben stehe ich gerade vor folgendem Problem:</p>
<p>Erstmal die Aufgabenstellung:<br />
&quot;Überladen Sie operator[] der Matrix-Klasse gemäß double* operator[](int i), so dass die jeweilige Zeile v[i] der Matrix in Form eines Arrays (Zeiger!) zurückgegeb en wird. Auf dieses kann dann wiederum mit einem Index zugegrien werden; insgesamt liefert der Aufruf von m[i][j] dann ein einzelnes Element in Zeile i, Spalte j der Matrix m.&quot;</p>
<p>In der Variante, die keinen Compilierungsfehler produziert, erscheint beim Ausführen des Programms &quot;Speicherzugriffsfehler (Speicherabzug geschrieben)&quot;.</p>
<p>Hier noch mein derzeitiger Code (sinnvoll gekürzt):</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;

using namespace std;

class Matrix
{
	private:
    	double v[3][3];
  	public:
    	Matrix()
    	{
      		for (int i = 0; i &lt; 3; ++i)
		{	
			for (int j = 0; j &lt; 3; ++j)
				v[i][j] = 0;
		}
    	}
    	Matrix(const double aIn[3][3])
    	{
      		for (int i = 0; i &lt; 3; ++i)
		{	
			for (int j = 0; j &lt; 3; ++j)
				v[i][j] = aIn[i][j];
		}
    	}
	double* operator[](const int i)
	{
		double *a[3];
		for (int j = 0; j &lt; 3; ++j)
			*a[j] = v[i][j];
		//return a;
	}

int main()
{

		const double a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    		Matrix m(a);
    		cout  &lt;&lt; m[1][1] &lt;&lt; m[2][1] &lt;&lt; m[3][1] &lt;&lt; endl; // muesste &quot;1 4 7&quot; ausspucken
}
</code></pre>
<p>In einer anderen Variante wird der Speicherort der Variable angegeben (0x98236)<br />
Könnt ihr vielleicht meinen Denk-/Programmierfehler finden?</p>
<p>Vielen Dank!</p>
<p>Grüße,<br />
Basti</p>
<p>PS: Ich arbeite momentan mit Ubuntu 12.04 LTS und GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365787</guid><dc:creator><![CDATA[Holzbasti]]></dc:creator><pubDate>Fri, 15 Nov 2013 20:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 15 Nov 2013 21:13:08 GMT]]></title><description><![CDATA[<p>Arrays fangen bei 0 an.</p>
<p>edit: Und noch viel mehr. Du gibst gar nichts aus operator[] zurück. Und die auskommentierte Rückgabe gibt einen Zeiger auf eine (nicht mehr existierende) lokale Variable zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365790</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 15 Nov 2013 21:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 15 Nov 2013 21:28:15 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Arrays fangen bei 0 an.</p>
<p>edit: Und noch viel mehr. Du gibst gar nichts aus operator[] zurueck. Und die auskommentierte Rueckgabe gibt einen Zeiger auf eine (nicht mehr existierende) lokale Variable zurueck.</p>
</blockquote>
<p>Genau, und deshalb:</p>
<pre><code>double* operator[](const int i)
    {
        return &amp;v[i][0];
    }
</code></pre>
<p><strong>- osdt</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365793</guid><dc:creator><![CDATA[osdt]]></dc:creator><pubDate>Fri, 15 Nov 2013 21:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 15 Nov 2013 21:44:04 GMT]]></title><description><![CDATA[<p>@ SeppJ<br />
Ersteres ist richtig und habe ich natürlich sofort geändert.<br />
Die Speicherüberlaufmeldung kam aber trotzdem noch.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30299">@osdt</a><br />
Dein Code macht genau das was ich will, obwohl ich überrascht bin, da ja &amp;v[i][0] da steht und ich aber manchmal auch gern das zweite Element hätte. Dieses kommt aber wie gefordert, deshalb DANKE, auch wenn ich nicht verstehe, wieso das klappt.</p>
<p>Grüße,<br />
Basti</p>
<p>PS: Wieso funktioniert die Vorschaufunktion nicht? Da erscheint nur erneut dieses (Schreib-)Fenster, der Text ist weg und nur mit zurück wieder zu holen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365795</guid><dc:creator><![CDATA[Holzbasti]]></dc:creator><pubDate>Fri, 15 Nov 2013 21:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to Importer:Error:WasEmpty on Fri, 15 Nov 2013 22:38:17 GMT]]></title><description><![CDATA[<p>Holzbasti schrieb:</p>
<blockquote>
<p>PS: Wieso funktioniert die Vorschaufunktion nicht? Da erscheint nur erneut dieses (Schreib-)Fenster, der Text ist weg und nur mit zurück wieder zu holen.</p>
</blockquote>
<p>Es gab neulich ein Notfallupdate der Forensoftware. Einiges funktioniert noch nicht wie gewohnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365798</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 15 Nov 2013 22:38:17 GMT</pubDate></item></channel></rss>