<?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 bei Kombination struct, Pointer&#x2F;Referenz und Funktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ein Neuling auf dem Gebiet von C++ (oder eigentlich sogar generell des Programmierens). Ich versuche gerade ein bestehendes lineares Programm mittels C++ heuristisch zu lösen.<br />
Dazu möchte ich im ersten Schritt meine Parameter und Variablen (Daten für Vektoren, Matrizen, int,…) in einem struct abspeichern. (Damit ich in den folgenden Funktionen nur jeweils eine Referenz/Pointer übergeben muss.<br />
Zusammengefasst würde ich gerne Vektoren/Matrizen aus einer .txt-Datei einlesen, in einem struct abspeichern, sodass sie in anderen Funktion verwendet werden können.</p>
<p>Im folgenden Beispiel sollten die Daten der Vektoren auch außerhalb der Funktionen ausgegeben werden können (global), dabei entsteht mir jedoch ein Fehler bezüglich Index out of range. Ich tue mir in diesem Fall etwas schwer bei der Kombination aus Pointer, Referenzen, structs und Funktionen. Separat betrachtet verstehe ich diese Themengebiete jedoch schon halbwegs.</p>
<p>Folgend bei Code:</p>
<pre><code>#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
#include&lt;fstream&gt;
#include&lt;string&gt;

using namespace std;

struct myStruct{
	vector&lt;vector&lt;int&gt;&gt; matrix;
	vector&lt;int&gt; vector;
};

void readData(myStruct *production);
void readData2(myStruct *production);

int main(){

	myStruct production;
	vector&lt;vector&lt;myStruct&gt;&gt; **matrices;
	vector&lt;myStruct&gt; *vec;

	readData(&amp;production);
	readData2(&amp;production);

	//Wenn ich die Ausgabe auf folgende Weise versuche, bekomme ich 
	//einen Fehler mit Index out of range...
	/*	
	for(int l=0; l &lt; 5; l++){
		for( int k=0; k &lt; 5; k++){
			cout &lt;&lt; production.matrix[l][k] &lt;&lt; &quot;\t&quot;;
			}
			cout &lt;&lt; endl;
	}

	for (int k=0; k &lt; 5; k++){
		cout &lt;&lt; production.vector[k] &lt;&lt; &quot; &quot;;
	}*/

	getchar();
	getchar();
	return EXIT_SUCCESS;
}

void readData(myStruct * production){
	ifstream in(&quot;Matrix2D.txt&quot;);
	myStruct r;

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von Matrix2D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
		vector&lt;int&gt; row;

		//1-4
		for (int k=0; k &lt; 5; k++){
			int input=0;
			in &gt;&gt; input;
			row.push_back(input);
		}
		r.matrix.push_back(row);
	}
	for(int l=0; l &lt; 5; l++){
		for( int k=0; k &lt; 5; k++){
			cout &lt;&lt; r.matrix[l][k] &lt;&lt; &quot;\t&quot;;
			}
			cout &lt;&lt; endl;
		}
	cout &lt;&lt; endl;
}

void readData2(myStruct * production){
	ifstream in(&quot;vector1D.txt&quot;);
	myStruct r;

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von vector1D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
			int input=0;
			in &gt;&gt; input;
			r.vector.push_back(input);
		}
	for (int k=0; k &lt; 5; k++){

		cout &lt;&lt; r.vector[k] &lt;&lt; &quot;\t&quot;;
	}
}
</code></pre>
<p>Text-Datei (Matrix2D.txt)<br />
1 2 3 4 5<br />
2 4 6 8 10<br />
1 3 5 7 9<br />
5 6 7 8 9<br />
2 3 4 5 6</p>
<p>Text-Datei(vector1D.txt)<br />
2 4 6 8 10</p>
<p>(Hätte ich auch in eine Datei zusammenführen können, wollte es jedoch versuchsweise trennen)</p>
<p>Vielleicht könnt ihr mir bitte weiterhelfen, auch wenn ich möglicherweise banale Fehler gemacht habe!</p>
<p>Vielen Dank,<br />
Grüße PaX</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320783/problem-bei-kombination-struct-pointer-referenz-und-funktion</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:06:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320783.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Oct 2013 09:33:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Kombination struct, Pointer&#x2F;Referenz und Funktion on Sat, 12 Oct 2013 09:33:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin ein Neuling auf dem Gebiet von C++ (oder eigentlich sogar generell des Programmierens). Ich versuche gerade ein bestehendes lineares Programm mittels C++ heuristisch zu lösen.<br />
Dazu möchte ich im ersten Schritt meine Parameter und Variablen (Daten für Vektoren, Matrizen, int,…) in einem struct abspeichern. (Damit ich in den folgenden Funktionen nur jeweils eine Referenz/Pointer übergeben muss.<br />
Zusammengefasst würde ich gerne Vektoren/Matrizen aus einer .txt-Datei einlesen, in einem struct abspeichern, sodass sie in anderen Funktion verwendet werden können.</p>
<p>Im folgenden Beispiel sollten die Daten der Vektoren auch außerhalb der Funktionen ausgegeben werden können (global), dabei entsteht mir jedoch ein Fehler bezüglich Index out of range. Ich tue mir in diesem Fall etwas schwer bei der Kombination aus Pointer, Referenzen, structs und Funktionen. Separat betrachtet verstehe ich diese Themengebiete jedoch schon halbwegs.</p>
<p>Folgend bei Code:</p>
<pre><code>#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
#include&lt;fstream&gt;
#include&lt;string&gt;

using namespace std;

struct myStruct{
	vector&lt;vector&lt;int&gt;&gt; matrix;
	vector&lt;int&gt; vector;
};

void readData(myStruct *production);
void readData2(myStruct *production);

int main(){

	myStruct production;
	vector&lt;vector&lt;myStruct&gt;&gt; **matrices;
	vector&lt;myStruct&gt; *vec;

	readData(&amp;production);
	readData2(&amp;production);

	//Wenn ich die Ausgabe auf folgende Weise versuche, bekomme ich 
	//einen Fehler mit Index out of range...
	/*	
	for(int l=0; l &lt; 5; l++){
		for( int k=0; k &lt; 5; k++){
			cout &lt;&lt; production.matrix[l][k] &lt;&lt; &quot;\t&quot;;
			}
			cout &lt;&lt; endl;
	}

	for (int k=0; k &lt; 5; k++){
		cout &lt;&lt; production.vector[k] &lt;&lt; &quot; &quot;;
	}*/

	getchar();
	getchar();
	return EXIT_SUCCESS;
}

void readData(myStruct * production){
	ifstream in(&quot;Matrix2D.txt&quot;);
	myStruct r;

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von Matrix2D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
		vector&lt;int&gt; row;

		//1-4
		for (int k=0; k &lt; 5; k++){
			int input=0;
			in &gt;&gt; input;
			row.push_back(input);
		}
		r.matrix.push_back(row);
	}
	for(int l=0; l &lt; 5; l++){
		for( int k=0; k &lt; 5; k++){
			cout &lt;&lt; r.matrix[l][k] &lt;&lt; &quot;\t&quot;;
			}
			cout &lt;&lt; endl;
		}
	cout &lt;&lt; endl;
}

void readData2(myStruct * production){
	ifstream in(&quot;vector1D.txt&quot;);
	myStruct r;

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von vector1D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
			int input=0;
			in &gt;&gt; input;
			r.vector.push_back(input);
		}
	for (int k=0; k &lt; 5; k++){

		cout &lt;&lt; r.vector[k] &lt;&lt; &quot;\t&quot;;
	}
}
</code></pre>
<p>Text-Datei (Matrix2D.txt)<br />
1 2 3 4 5<br />
2 4 6 8 10<br />
1 3 5 7 9<br />
5 6 7 8 9<br />
2 3 4 5 6</p>
<p>Text-Datei(vector1D.txt)<br />
2 4 6 8 10</p>
<p>(Hätte ich auch in eine Datei zusammenführen können, wollte es jedoch versuchsweise trennen)</p>
<p>Vielleicht könnt ihr mir bitte weiterhelfen, auch wenn ich möglicherweise banale Fehler gemacht habe!</p>
<p>Vielen Dank,<br />
Grüße PaX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359776</guid><dc:creator><![CDATA[PaX_1960]]></dc:creator><pubDate>Sat, 12 Oct 2013 09:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Kombination struct, Pointer&#x2F;Referenz und Funktion on Sat, 12 Oct 2013 10:45:04 GMT]]></title><description><![CDATA[<p>Du übergibst zwar einen Zeiger production an die read-Funktionen, aber du verwendest ihn dort nie. Wie soll also ein Wert drin stehen?<br />
Im Übrigen kennt ein vector seine Grösse, du soltest also nie eine Konstante benutzen, um in einer for-Schleife auf die Werte zuzugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359785</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 12 Oct 2013 10:45:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Kombination struct, Pointer&#x2F;Referenz und Funktion on Sat, 12 Oct 2013 13:12:06 GMT]]></title><description><![CDATA[<p>Hallo Manni,</p>
<p>danke für deinen Hinweis. Eigentlich klar im Nachhinein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich habe es jetzt noch einmal überarbeitet und es macht nun das was es soll...</p>
<p>Folgend nun die vorläufige Lösung:</p>
<pre><code>struct myStruct{
	vector&lt;vector&lt;int&gt;&gt; matrix;
	vector&lt;int&gt; vector;
};

void readData(myStruct *production);
void readData2(myStruct *production);

int main(){

	myStruct production;
	vector&lt;vector&lt;myStruct&gt;&gt; **matrices;
	vector&lt;myStruct&gt; *vec;

	readData(&amp;production);
	readData2(&amp;production);

	for(int l=0; l &lt; production.matrix.size(); l++){
		for( int k=0; k &lt; production.matrix.size(); k++){
			cout &lt;&lt; production.matrix[l][k] &lt;&lt; &quot;\t&quot;;
			}
			cout &lt;&lt; endl;
	}

	cout &lt;&lt; endl;

	for (int k=0; k &lt; production.vector.size(); k++/*int k=0; k &lt; 5 ; k++*/){
		cout &lt;&lt; production.vector[k] &lt;&lt; &quot;\t&quot;;
	}

	getchar();
	getchar();
	return EXIT_SUCCESS;
}

void readData(myStruct * production){
	ifstream in(&quot;Matrix2D.txt&quot;);

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von Matrix2D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
		vector&lt;int&gt; row;

		//1-4
		for (int k=0; k &lt; 5; k++){
			int input=0;
			in &gt;&gt; input;
			row.push_back(input);
		}
		(*production).matrix.push_back(row);
	}
}

void readData2(myStruct * production){
	ifstream in(&quot;vector1D.txt&quot;);

	if(in.fail()){
			cout &lt;&lt; &quot;Fehler beim oeffnen von vector1D.txt&quot;;
			exit(0);
	}
	for (int l=0; l &lt; 5; l++){
			int input=0;
			in &gt;&gt; input;
			(*production).vector.push_back(input);
		}
}
</code></pre>
<p>Grüße<br />
PaX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359812</guid><dc:creator><![CDATA[PaX_1960]]></dc:creator><pubDate>Sat, 12 Oct 2013 13:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Kombination struct, Pointer&#x2F;Referenz und Funktion on Mon, 14 Oct 2013 08:45:38 GMT]]></title><description><![CDATA[<p>Und wieder das verflixte 2D-Array Problem <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="😉"
    /><br />
Du benutzt einen <code>std::vector&lt;std::vector&lt;int&gt;&gt;</code> für die Darstellung, was etwas umständlich zu handhaben ist. Wenn du eine rechteckige Matrix hast kannst du einen einfachen <code>std::vector&lt;int&gt;</code> benutzen, musst allerdings die Indizes von 2D nach linear selbst umrechnen. Lässt sich super in eine eigene Klasse verpacken und ist eine schöne Anfängeraufgabe.</p>
<p>Außerdem übergibst du die Parameter an die <code>readdata</code> Funktionen als Zeiger, ich fände Referenzen dort besser. Und wo wir gerade dabei sind, <code>readdata</code> und <code>readdata2</code> sind etwas unglücklich implementiert. Erstens haben sie keine aussagekräftige Namen und zweitens könnte man sowas etwas geschickter programmieren:</p>
<pre><code>std::vector&lt;int&gt; read_data_vector( const std::string&amp; FileName )
{
   std::vector&lt;int&gt; v;

   // lese Daten
   // ...

   return v;
}

Array2D read_matrix_data( const std::string&amp; FileName )
{
   Array2D a;

   // lese Daten
   // ...
   return a;
}
</code></pre>
<p>Und wenn du das Datenformat selbst festlegen kannst könnte man sogar die Stream Operatoren überschreiben, um das an die STL Standards anzulehnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360118</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 14 Oct 2013 08:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Kombination struct, Pointer&#x2F;Referenz und Funktion on Mon, 14 Oct 2013 16:48:13 GMT]]></title><description><![CDATA[<p>Hallo DocShoe,</p>
<p>vielen Dank für deine Hinweise. Im ersten Schritt war ich anfangs nur froh, dass es das gemacht hat was es soll. Jetzt werde ich versuchen deine Tipps zu berücksichtigen.</p>
<p>Also danke nochmals!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360253</guid><dc:creator><![CDATA[PaX_1960]]></dc:creator><pubDate>Mon, 14 Oct 2013 16:48:13 GMT</pubDate></item></channel></rss>