<?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[problem mit meiner struktur]]></title><description><![CDATA[<p>HALL0.</p>
<p>zuerst erstmal mein etwas langer quellcode:</p>
<pre><code class="language-cpp">struct cInDat
{
	public:
		void	SetINT (int i, int zahl)
		{
			itsINT[i] = zahl;
		}
		double	GetINT (int i) const
		{
			return itsINT[i];
		}
		void	DecLayOR ()
		{
			int i;
			itsINT = new int [2];
			for (i=0;i&lt;2;i++)
				itsINT[i] = -1;
		}
	private:
		int		*itsINT;
};

struct cData
{
	public:
		void SetDat (int i, cInDat data)
		{
			itsVAL[i].push_back(data);
		}
		void SetVal (int type, int num, int i, double zahl)
		{
			itsVAL[type][num].SetINT(i,zahl);
		}
		int  GetVal (int type, int num, int i) const
		{
			return itsVAL[type][num].GetINT(i);
		}
	private:
		vector &lt;cInDat&gt; itsVAL[2];
};

int main()
{
	cInDat MyTest;
	cData MyData;
	int i;

	MyTest.DecLayOR();
	for (i=0;i&lt;2;i++)
		MyData.SetDat(i,MyTest);

	MyData.SetVal(0,0,0,1);

	cout &lt;&lt; MyData.GetVal(0,0,0) &lt;&lt; &quot; &quot; &lt;&lt; MyData.GetVal(1,0,0);
}
</code></pre>
<p>der code funktioniert in etwa so: zuerst lege ich mir eine struktur fest (cInDat), die aus einem eindimensionalem array besteht. mit dieser struktur baue ich eine weitere struktur (cData), die cInDat in form von vectoren speichert.</p>
<p>das problem ist nun wie folgt: warum wird in zeile 54 die gleiche zahl, nämlich eins, ausgegeben?<br />
eigentlich müsste nur der erste wert eins sein, so wie ich es in zeile 52 festgelegt habe, also nur für das erste der beiden arrays (zeile 39). der zweite wert müsste seinen ursprünglichen wert von -1 behalten (zeile 17).</p>
<p>DANKE.<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162764/problem-mit-meiner-struktur</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 19:04:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162764.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Oct 2006 04:53:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 04:53:56 GMT]]></title><description><![CDATA[<p>HALL0.</p>
<p>zuerst erstmal mein etwas langer quellcode:</p>
<pre><code class="language-cpp">struct cInDat
{
	public:
		void	SetINT (int i, int zahl)
		{
			itsINT[i] = zahl;
		}
		double	GetINT (int i) const
		{
			return itsINT[i];
		}
		void	DecLayOR ()
		{
			int i;
			itsINT = new int [2];
			for (i=0;i&lt;2;i++)
				itsINT[i] = -1;
		}
	private:
		int		*itsINT;
};

struct cData
{
	public:
		void SetDat (int i, cInDat data)
		{
			itsVAL[i].push_back(data);
		}
		void SetVal (int type, int num, int i, double zahl)
		{
			itsVAL[type][num].SetINT(i,zahl);
		}
		int  GetVal (int type, int num, int i) const
		{
			return itsVAL[type][num].GetINT(i);
		}
	private:
		vector &lt;cInDat&gt; itsVAL[2];
};

int main()
{
	cInDat MyTest;
	cData MyData;
	int i;

	MyTest.DecLayOR();
	for (i=0;i&lt;2;i++)
		MyData.SetDat(i,MyTest);

	MyData.SetVal(0,0,0,1);

	cout &lt;&lt; MyData.GetVal(0,0,0) &lt;&lt; &quot; &quot; &lt;&lt; MyData.GetVal(1,0,0);
}
</code></pre>
<p>der code funktioniert in etwa so: zuerst lege ich mir eine struktur fest (cInDat), die aus einem eindimensionalem array besteht. mit dieser struktur baue ich eine weitere struktur (cData), die cInDat in form von vectoren speichert.</p>
<p>das problem ist nun wie folgt: warum wird in zeile 54 die gleiche zahl, nämlich eins, ausgegeben?<br />
eigentlich müsste nur der erste wert eins sein, so wie ich es in zeile 52 festgelegt habe, also nur für das erste der beiden arrays (zeile 39). der zweite wert müsste seinen ursprünglichen wert von -1 behalten (zeile 17).</p>
<p>DANKE.<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159279</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 04:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 05:21:06 GMT]]></title><description><![CDATA[<p>Du rufst genau <strong>einmal</strong> DecLayOR auf, danach wird nur noch der Zeiger itsINT herumkopiert. Wieso erwartest du, danach mehr als ein Array zu haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159283</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 23 Oct 2006 05:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:00:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>: danke für die antwort.</p>
<pre><code class="language-cpp">for (i=0;i&lt;2;i++)
	{
		MyTest.DecLayOR();
		MyData.SetDat(i,MyTest);
	}
</code></pre>
<p>ich habe die main-funktion wie oben geändert. müsste ich dann noch eine funktion delete in 'cInDat' einfügen, um den zuvor geschaffenen speicherplatz wieder frei zu machen?</p>
<p>DANKE.<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159289</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:05:23 GMT]]></title><description><![CDATA[<p>Erstens: Wieso gibt dein GetINT() einen double zurück?</p>
<p>Zweitens: An deiner Stelle würde ich die struct zu einer vollwertigen Klasse ausbauen - inklusive Konstruktor (anstelle der DecLayOR()-Methode), Cpy-Ctor und Destruktor (da gehört dann das delete[] rein).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159290</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:11:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: danke für die hinweise.</p>
<p>- die 'DecLayOR()-Methode' kann leider nicht in den Konstruktor, da der wert '2' (zeile 15) erst zuvor aus einer datei ausgelesen werden muss. danach wollte ich dann die 'DecLayOR()-Methode' aufrufen.<br />
- der hinweis mit dem delete[] im Destruktor ist gut, DANKE!</p>
<p>STICK.</p>
<p>p.s.:</p>
<blockquote>
<p>Erstens: Wieso gibt dein GetINT() einen double zurück?</p>
</blockquote>
<p>-&gt; war ein versehen, da ich den code aus meiner original-datei herauskopiert und modifiziert habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159291</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:30:30 GMT]]></title><description><![CDATA[<p>stick_thai schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: danke für die hinweise.</p>
<p>- die 'DecLayOR()-Methode' kann leider nicht in den Konstruktor, da der wert '2' (zeile 15) erst zuvor aus einer datei ausgelesen werden muss. danach wollte ich dann die 'DecLayOR()-Methode' aufrufen.</p>
</blockquote>
<p>Randfrage: Wie kommt der Wert dann in deine Methode rein?</p>
<blockquote>
<p>- der hinweis mit dem delete[] im Destruktor ist gut, DANKE!</p>
</blockquote>
<p>Aber dann solltest du auch darauf achten, daß dir niemand den Speicher weglöscht (sprich: Die Klasse braucht auch einen Copy-Ctor und operator=, der neuen Speicher anlegt und den Inhalt von itsINT kopiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159300</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:37:07 GMT]]></title><description><![CDATA[<p>so kommt der wert in die methode:</p>
<pre><code class="language-cpp">class cInDat
{
	public:
		cInDat::cInDat()
		{
			Bord = 0;
		}
		cInDat::~cInDat()
		{}
		void	SetINT (int i, int zahl)
		{
			itsINT[i] = zahl;
		}
		void	SetBord (int i)
		{
			Bord = i;			
		}
		double	GetINT (int i) const
		{
			return itsINT[i];
		}
		void	DecLayOR ()
		{
			if (0 != Bord)
			{
				int i;
				itsINT = new int [Bord];
				for (i=0;i&lt;Bord;i++)
					itsINT[i] = -1;
			}
		}
	private:
		int		Bord;
		int		*itsINT;
};
</code></pre>
<blockquote>
<p>Aber dann solltest du auch darauf achten, daß dir niemand den Speicher weglöscht</p>
</blockquote>
<p>das muss ich mir erstmal irgendwo durchlesen, denn das verstehe ich so nicht.</p>
<p>STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159303</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 06:39:05 GMT]]></title><description><![CDATA[<p>Warum benutzt du statt diesem unhandlichen int-Zeiger nicht einfach vector&lt;int&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159304</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 23 Oct 2006 06:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 07:02:49 GMT]]></title><description><![CDATA[<p>an MFK:<br />
einen einfachen vector kann ich deshalb nicht nehmen, weil mein beispiel in wirklichkeit nicht ein eindimensionales array ist, sondern wie du unten siehst, 4-dimensional.</p>
<pre><code class="language-cpp">int  itsINT[4];
		int ****itsLayINT;
</code></pre>
<p>ich wüsste nicht, wie dies mit einem vector umzusetzen geht.</p>
<p>vielleicht hast du nen tipp?<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159308</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 07:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 07:04:02 GMT]]></title><description><![CDATA[<p>an MFK:<br />
einen einfachen vector kann ich deshalb nicht nehmen, weil mein beispiel in wirklichkeit nicht ein eindimensionales array ist, sondern wie du unten siehst, 4-dimensional.</p>
<pre><code class="language-cpp">int  itsINT[4];
		cCoo ****itsLayINT;
</code></pre>
<p>ich wüsste nicht, wie dies mit einem vector umzusetzen geht.</p>
<p>vielleicht hast du nen tipp?<br />
STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159309</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 07:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 09:01:44 GMT]]></title><description><![CDATA[<p>Du kannst auch mehrdimensionale vector'en aufbauen - vector&lt;vector&lt;int&gt; &gt; oder noch größer.</p>
<p>(und wenn das Feld &quot;rechteckig&quot; sein soll, könntest du auch einen eindimensionalen vector&lt;&gt; verwenden und den Index passend umrechnen)</p>
<blockquote>
<blockquote>
<p>Aber dann solltest du auch darauf achten, daß dir niemand den Speicher weglöscht</p>
</blockquote>
<p>das muss ich mir erstmal irgendwo durchlesen, denn das verstehe ich so nicht.</p>
</blockquote>
<p>Im Klartext: die Standard-Zuweisungen, die dir dein Compiler spendiert, kopieren flach (also nur die Zeigeradresse). Damit verwenden nach der Zuweisung Original und Kopie die selben Daten (das führt erstens zu Problemen, wenn sie sich gegenseitig beeinflussen und zweitens zu Zugriffsfehlern, wenn beide versuchen, den selben Block freizugeben - letzteres ist schwerwiegender).<br />
Aus dem Grund mußt du, wenn du mit dynamischem Speicher hantierst, meistens den Copy-Ctor (cInDat(const cInDat&amp; other);) und Zuweisungs-Operator (cInDat&amp; operator=(const cInDat&amp; other);) selber definieren, damit sie eine tiefe Kopie ihres Inhalts durchführen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159321</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Oct 2006 09:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to problem mit meiner struktur on Mon, 23 Oct 2006 14:43:31 GMT]]></title><description><![CDATA[<p>an CStoll:</p>
<p>und wenn ich anstelle des zeigers einen vector benutze, dann kann ich mir Copy-Ctor und Zuweisungs-Operator sparen und meine klasse wird etwas einfacher, richtig?</p>
<p>STICK.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1159647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1159647</guid><dc:creator><![CDATA[stick_thai]]></dc:creator><pubDate>Mon, 23 Oct 2006 14:43:31 GMT</pubDate></item></channel></rss>