<?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[vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Problem bei dem ich mir absolut nicht vorstellen kann, wie es überhaupt entsteht.<br />
Das Programm soll im Endeffekt ein Taschenrechner sein.<br />
Am besten ich poste zum besseren Verstaendnis etwas Code:</p>
<pre><code class="language-cpp">class formel
{
public:
	formel(string dieformel);		//Konstruktor
	~formel();						//Destruktor
	formel(const formel &amp;rhs);		//Kopierkonstruktor

	double formel_value;
private:
	void zahlenex(string formel);
	double calc();

	vector&lt;int&gt; rechenablauf[1][127];
	vector&lt;double&gt; zahlen[127];
};
</code></pre>
<p>Der Eingabestring bzw. Die 'Aufgabe' für den taschenrechner wird an den Konstruktor als Parameter übergeben, dieser rechnet die Aufgabe aus und speichert das Ergebnis in der Variablen formel_value. Wobei ich zugeben muss, zurzeit bin ich da noch nicht angekommen.<br />
u.a. ruft der Konstruktor auch die Elementfunktion zahlenex() auf, in welcher das Problem liegt.</p>
<pre><code class="language-cpp">void formel::zahlenex(string formel)
{
	//Code ...
	this-&gt;rechenablauf[0]-&gt;push_back(9);
	this-&gt;rechenablauf[1]-&gt;push_back(j);		//Fehler
	j++;
	//Code ...
}
</code></pre>
<p>Normalerweise arbeiten diese 3 Zeilen Code ganz normal, nur wenn im Term eine Variable enthalten ist zeigt sich der Fehler, hier der Code für die Funktion, die den Benutzer nach dem Wert der Variablen fragt.</p>
<pre><code class="language-cpp">double var_val(char zeichen)
{
	//verifizieren ob Variable bereits bekannt
	switch(zeichen)
	{
	case 'a':
		if(set_vars[0])
			return vars[0];
		break;
	//b-z, A-Y
	case 'Z':
		if(set_vars[25])
			return vars[25];
		break;
	default:
		cerr &lt;&lt; &quot;Fehler! var_val(char zeichen) wurde auf ein Zeichen, welches keine Variable ist angesetzt!\n&quot;;
		break;
	}

	//Wenn nicht bekannt, dann abfragen
	cout &lt;&lt; zeichen &lt;&lt; &quot;?:\n&quot;;
	double temp;
	cin &gt;&gt; temp;
	switch(zeichen)
	{
	case 'a':
		//b-z, A-Y
	case 'Z':
		set_vars[25] = true;
		vars[25] = temp;
		break;
	default:
		cerr &lt;&lt; &quot;Fehler! var_val(char zeichen) wurde auf ein Zeichen, welches keine Variable ist angesetzt!\n&quot;;
		break;
	}

	return temp;
}
</code></pre>
<p>Mein Problem ist, dass Wenn eine Variable im Term enthalten ist, nach der Variable eine Zahl (4.xxxe-310) in den vector zahlen[127] eingefügt wird und zwar in der Zeile in zahlenex() wo //Fehler hintersteht.</p>
<p>Als ich mit dem Debugger noch tiefer gegraben habe, habe ich herausbekommen, dass dieser Wert direkt nach dem ausführen einer ret Anweisung in zahlen[] auftaucht.</p>
<p>Zum besseren verständnis noch eine Ausgabe von meinem Programm:</p>
<pre><code>Term eingeben:  123a+456=
a?:
7
Die Zahlen sind:
Zahl 1 ist: 123
Zahl 2 ist: 7
Zahl 3 ist: 4.24399e-314
Zahl 4 ist: 456
Die Rechenzeichen sind:
Rechenzeichen 1 ist: 10
Rechenzeichen 2 ist: 1
</code></pre>
<p>Sowas hab ich noch nie gehabt, ich hoffe, dass vielleicht einer von euch mir helfen kann.<br />
Danke im Voraus.</p>
<p>P.S.: Compiler: VC++8 Express Beta 2</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/117548/vector-bekommt-wert-zugewiesen-ohne-dass-auf-ihn-zugegriffen-wird</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 00:50:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117548.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Aug 2005 17:42:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 18:30:31 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe ein Problem bei dem ich mir absolut nicht vorstellen kann, wie es überhaupt entsteht.<br />
Das Programm soll im Endeffekt ein Taschenrechner sein.<br />
Am besten ich poste zum besseren Verstaendnis etwas Code:</p>
<pre><code class="language-cpp">class formel
{
public:
	formel(string dieformel);		//Konstruktor
	~formel();						//Destruktor
	formel(const formel &amp;rhs);		//Kopierkonstruktor

	double formel_value;
private:
	void zahlenex(string formel);
	double calc();

	vector&lt;int&gt; rechenablauf[1][127];
	vector&lt;double&gt; zahlen[127];
};
</code></pre>
<p>Der Eingabestring bzw. Die 'Aufgabe' für den taschenrechner wird an den Konstruktor als Parameter übergeben, dieser rechnet die Aufgabe aus und speichert das Ergebnis in der Variablen formel_value. Wobei ich zugeben muss, zurzeit bin ich da noch nicht angekommen.<br />
u.a. ruft der Konstruktor auch die Elementfunktion zahlenex() auf, in welcher das Problem liegt.</p>
<pre><code class="language-cpp">void formel::zahlenex(string formel)
{
	//Code ...
	this-&gt;rechenablauf[0]-&gt;push_back(9);
	this-&gt;rechenablauf[1]-&gt;push_back(j);		//Fehler
	j++;
	//Code ...
}
</code></pre>
<p>Normalerweise arbeiten diese 3 Zeilen Code ganz normal, nur wenn im Term eine Variable enthalten ist zeigt sich der Fehler, hier der Code für die Funktion, die den Benutzer nach dem Wert der Variablen fragt.</p>
<pre><code class="language-cpp">double var_val(char zeichen)
{
	//verifizieren ob Variable bereits bekannt
	switch(zeichen)
	{
	case 'a':
		if(set_vars[0])
			return vars[0];
		break;
	//b-z, A-Y
	case 'Z':
		if(set_vars[25])
			return vars[25];
		break;
	default:
		cerr &lt;&lt; &quot;Fehler! var_val(char zeichen) wurde auf ein Zeichen, welches keine Variable ist angesetzt!\n&quot;;
		break;
	}

	//Wenn nicht bekannt, dann abfragen
	cout &lt;&lt; zeichen &lt;&lt; &quot;?:\n&quot;;
	double temp;
	cin &gt;&gt; temp;
	switch(zeichen)
	{
	case 'a':
		//b-z, A-Y
	case 'Z':
		set_vars[25] = true;
		vars[25] = temp;
		break;
	default:
		cerr &lt;&lt; &quot;Fehler! var_val(char zeichen) wurde auf ein Zeichen, welches keine Variable ist angesetzt!\n&quot;;
		break;
	}

	return temp;
}
</code></pre>
<p>Mein Problem ist, dass Wenn eine Variable im Term enthalten ist, nach der Variable eine Zahl (4.xxxe-310) in den vector zahlen[127] eingefügt wird und zwar in der Zeile in zahlenex() wo //Fehler hintersteht.</p>
<p>Als ich mit dem Debugger noch tiefer gegraben habe, habe ich herausbekommen, dass dieser Wert direkt nach dem ausführen einer ret Anweisung in zahlen[] auftaucht.</p>
<p>Zum besseren verständnis noch eine Ausgabe von meinem Programm:</p>
<pre><code>Term eingeben:  123a+456=
a?:
7
Die Zahlen sind:
Zahl 1 ist: 123
Zahl 2 ist: 7
Zahl 3 ist: 4.24399e-314
Zahl 4 ist: 456
Die Rechenzeichen sind:
Rechenzeichen 1 ist: 10
Rechenzeichen 2 ist: 1
</code></pre>
<p>Sowas hab ich noch nie gehabt, ich hoffe, dass vielleicht einer von euch mir helfen kann.<br />
Danke im Voraus.</p>
<p>P.S.: Compiler: VC++8 Express Beta 2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848213</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 08 Aug 2005 18:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 17:57:28 GMT]]></title><description><![CDATA[<p>Hm, nimm ein Set für die Variablen, dann kannst du dir den Switch schon mal sparen.</p>
<p>Die zeile myvector[1][n] kann nicht funktionieren, da der vektor nur ein element hat.</p>
<p>Das Tutorial von boost::spirit beschäftigt sich damit, einen einfachen<br />
Formelparser mit spirit zu schreiben, auch wenn das evtl. für dich<br />
noch etwas hoch ist, ist es sicher einen Blick wert:</p>
<p><a href="http://boost.org/libs/spirit/index.html" rel="nofollow">http://boost.org/libs/spirit/index.html</a></p>
<p>phlox</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848221</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Mon, 08 Aug 2005 17:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 18:09:01 GMT]]></title><description><![CDATA[<p>Hab mir den ganzen code gar nicht angesehen aber du definierst</p>
<pre><code class="language-cpp">vector&lt;int&gt; rechenablauf[1][127];
</code></pre>
<p>das ist ein 2 dim array von vektoren<br />
und dann greifst du so darauf zu</p>
<pre><code class="language-cpp">this-&gt;rechenablauf[0]-&gt;push_back(9); // rechenablauf[0] ist kein pointer
</code></pre>
<p>das sollte nicht compilieren<br />
ps: warun this-&gt; , ist zwar ok nur unnötig.<br />
Kurt</p>
<p>edit: nach etwas nachdenken bin zum schluss gekommen dass das doch ein pointer ist nämlich auf rechenablauf[0][0] daher compiliert es aber es ist wahrscheinlich nicht was du willst. es kracht in der nächsten zeile da rechenablauf in der ersten dimension nur ein element hat und du greifst auf das zweite zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848225</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Mon, 08 Aug 2005 18:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 18:33:01 GMT]]></title><description><![CDATA[<p>hmm compiliert alles ganz brav.</p>
<p>Aber wo du mich drauf aufmerksam machst, sehe ich, meinen Fehler. Ich wollte im Endeffekt ein 2D vector haben, aber was ich gemacht habe ist ein 2DArray von 1D vectoren, ziemlich viel Speicher der da umsonst verbraten wird. Und vor allem, ich habe keine Variable Größe die ich ja bei einem Vektor hätte. Allerdings wäre ein 1D Array von 1D vectoren eine Lösung meines Problems (u.U. auch meines großen Problems) , da eine Dimension konstant ist von der Größe her.</p>
<p>Trotzdem ist mir nicht klar, warum im vector zahlen[] was rumgepfuscht wird, ohne das darauf zugegriffen wird. Es kann doch kein Zufall sein, dass dieses Programm immer an eine andere Stelle des Speichers, welche zufälligerweise immer die des letzten Elements von zahlen[] ist immer die gleiche Zahl schreibt. Klingt fast wie ein intelligenter Bug.</p>
<p>Also der Link ist gut, ich werd mir das mal in Ruhe ansehen.<br />
Meinst du mit set den Container?</p>
<p>Ich korrigiere erstmal meinen Code und gucke dann ob der Fehler immernoch ist.<br />
Danke auf jeden Fall, dass ihr mich schonmal auf einen anderen Fehler aufmerksam gemacht habt, der hätte nähmlich später Probleme gemacht.</p>
<p>P.S.: dass this-&gt; nicht nötig ist weiß ich, macht den Code hier aber meiner Meinung nach verständlicher.</p>
<p>------------------------------------------</p>
<p>So habe jetzt aus</p>
<pre><code class="language-cpp">vector&lt;int&gt; rechenablauf[1][127];
</code></pre>
<p>das gemacht:</p>
<pre><code class="language-cpp">vector&lt;int&gt; rechenablauf[1];
</code></pre>
<p>Der zugriff erfolgt jetzt so:</p>
<pre><code class="language-cpp">this-&gt;rechenablauf[0].push_back(9);
</code></pre>
<p>Funktioniert auch, aber mein großes Problem besteht weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848240</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 08 Aug 2005 18:33:01 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 18:31:55 GMT]]></title><description><![CDATA[<p>Ger001 schrieb:</p>
<blockquote>
<p>Trotzdem ist mir nicht klar, warum im vector zahlen[] was rumgepfuscht wird, ohne das darauf zugegriffen wird.</p>
</blockquote>
<p>Doch ist ganz klar mit</p>
<pre><code class="language-cpp">this-&gt;rechenablauf[1]-&gt;push_back(j);
</code></pre>
<p>greifts du auf den ersten vector zu der nicht mehr zu rechenablauf gehört ( du greifst auf das zweite element zu und die variable hat nur ein element ). Im speicher liegt das array von vector&lt;double&gt; zahlen gleich dahinter.<br />
rechenablauf[1]-&gt;push_back(j) wird also zu zahlen[0].push_back(j);<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848247</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Mon, 08 Aug 2005 18:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 18:40:49 GMT]]></title><description><![CDATA[<p>Habe ich jetzt richtig verstanden, du willst einen 2D-Vektor?</p>
<p>Dann nimm</p>
<pre><code class="language-cpp">std::vector&lt; std::vector&lt;int&gt; &gt;    rechenablauf;
</code></pre>
<p>Damit hast du ein 2D-Vektor, womit du mit</p>
<pre><code class="language-cpp">rechenablauf[x][y] = ... //Was weiß ich
</code></pre>
<p>zugreifen kannst.</p>
<p>Ich hoffe, ich konnte ein bißchen helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848254</guid><dc:creator><![CDATA[BigBoomer]]></dc:creator><pubDate>Mon, 08 Aug 2005 18:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to vector bekommt Wert zugewiesen, ohne dass auf ihn zugegriffen wird on Mon, 08 Aug 2005 19:01:58 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6123">@BigBoomer</a> die Version kenne ich, damit bin ich oder der compiler nicht klar gekommen, sobald es um den Zugriff über Elementfunktionen ging.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7155">@ZuK</a><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> Hast recht, ich hatte da was in falscher Erinnerung. Ich dachte</p>
<pre><code class="language-cpp">int myArray[10];
</code></pre>
<p>würde ein Array mit 11 Elementen erzeugen, aber offensichtlich hast du recht, denn nachdem ich</p>
<pre><code class="language-cpp">vector&lt;int&gt; rechenablauf[2];
</code></pre>
<p>stehen habe läufts.</p>
<p>Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
War also letztenendes ein einfaches Problem des Syntaxverständnisses.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848270</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 08 Aug 2005 19:01:58 GMT</pubDate></item></channel></rss>