<?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[Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B]]></title><description><![CDATA[<p>Hallo C++ Community!</p>
<p>Ich beschäftige mich derzeit mit dem Konzept von OOP, sowie Syntax und Semantik.<br />
Nun bin ich auf folgendes Problem gestoßen:</p>
<p>Es wurden zwei Klassen erstellt: Menu und Vektoren.<br />
In der Main-Funktion wird lediglich eine Instanz oMenu erstellt, welche auch direkt folgendermaßen geöffnet wird:<br />
oMenu.fMenu();</p>
<p>Nun besteht die Auswahl verschiedene Rechenoperationen durchzuführen.<br />
Für die Berechnung des Skalarproduktes sind zwei Vektoren erforderlich.<br />
Nun wird die Dimension abgefragt und die Werte, welche in einem Array gespeicher werden (abhängig von der Dimension).<br />
Nun erstellen wir also zwei Instanzen VektorA und VektorB aus der Klasse Vektoren und übergeben die Werte Dimension und die Arrays (entweder als Konstruktor oder als Funktion fSetWerte).<br />
Die Werte können mittels einer Funktion fGetWerte abgerufen werden.</p>
<p>Und hier ist das Problem:<br />
Wenn VektorA seine Werte übergeben bekommt sind diese zunächst abrufbar. Allerdings ist dies nicht mehr möglich, wenn der zweite VektorB seine Werte übergeben bekommt. Dann sind nur noch die Werte von VektorB abrufbar. Die von VektorA werden gelöscht.<br />
Wo ist hier das Problem?</p>
<p>Ich benutze Dev C++ und den Compiler TDM-GCC 4.6.1 64-bit (Windows 8).</p>
<p>Hoffentlich kennt sich einer mit diesem Problem aus und kann mir sagen,<br />
was genau hier schief läuft.</p>
<p>Vielen Dank im Voraus!! <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="🙂"
    /></p>
<p>Hier ist der/die Code/s:<br />
Anmerkung: Zu Testzwecken wurde noch ein dritter VektorC erstellt, um das Problem zu ermitteln.</p>
<p>Main-Funktion:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot;
#include &quot;menu.h&quot;

using namespace std;

int main(int argc, char *argv[]) {
	Menu oMenu;
	while(true){oMenu.fMenu();}
	return 0;
}
</code></pre>
<p>Menu-Header</p>
<pre><code>#ifndef MENU_H
#define MENU_H

using namespace std;

class Menu
{
	private:
		char cAuswahl;
		int iDim;
		double dVec1[3], dVec2[3], dVec3[3];

	public:
		//Konstruktor//
		Menu();
		//Destruktor//
		~Menu();

		//Menüaufruf
		void fMenu(void);

		//Rechenaufruf
		void fVektorlaenge();
		void fSkalarprodukt();

		//Set-Funktionen
		char setAuswahl();
};

#endif // MENU_H
</code></pre>
<p>Menu.cpp</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot; 
#include &quot;menu.h&quot; // class's header file

using namespace std;

//Konstruktor//
Menu::Menu(){}
//Destruktor//
Menu::~Menu(){cout &lt;&lt; &quot;Menu zerstoert&quot;;}

void Menu::fMenu(){

	while(true){
		system(&quot;cls&quot;);
		cout &lt;&lt; endl &lt;&lt; endl
			 &lt;&lt; &quot;Rechner Vektoren&quot; &lt;&lt; endl
			 &lt;&lt; &quot;Funktionen:&quot; &lt;&lt; endl 
			 &lt;&lt; &quot;1: Vektorlaenge&quot;&lt;&lt;endl
			 &lt;&lt; &quot;2: Skalarprodukt &quot; &lt;&lt; endl
			 &lt;&lt; &quot;3: Einheitsvektor &quot; &lt;&lt; endl
			 &lt;&lt; &quot;4: Winkel zwischen zwei Vektoren &quot; &lt;&lt; endl
			 &lt;&lt; &quot;5: Vektor-Addition&quot; &lt;&lt; endl
			 &lt;&lt; &quot;6: Vektor-Subtraktion&quot; &lt;&lt; endl
			 &lt;&lt; &quot;e: Exit&quot; &lt;&lt;endl&lt;&lt;endl;

		this-&gt;cAuswahl = getch();

		switch(this-&gt;cAuswahl){
				case '1':
					return fVektorlaenge();
					break;

			    case '2':
					fSkalarprodukt();
					break;
				/*
			case '3':
				{
				double vector[3];
				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 1 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vector[0];
				cin &gt;&gt; vector[1];
				cin &gt;&gt; vector[2];
				cout &lt;&lt; endl &lt;&lt; fVecEinheit(vector) &lt;&lt; endl;
				}
				break;

			case '4':
				{
				double vec2[3], vec1[3];
				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 1 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vec1[0];
				cin &gt;&gt; vec1[1];
				cin &gt;&gt; vec1[2];

				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 2 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vec2[0];
				cin &gt;&gt; vec2[1];
				cin &gt;&gt; vec2[2];

				cout&lt;&lt;endl &lt;&lt; fVecWinkel(vec1,vec2) &lt;&lt; endl;
				}
				break;
			*/
			case 'e':
				exit(0);
			default:
				cout&lt;&lt; &quot;Fail&quot;;
				break;
		}

	}

	return;
}

void Menu::fVektorlaenge(){
		cout &lt;&lt; &quot;Anzahl Dimensionen: &quot;;
		cin &gt;&gt; this-&gt;iDim;
		double dVec[iDim];
		cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres Vektors ein: &quot; &lt;&lt; endl;
		for(int i = 0;i&lt;this-&gt;iDim;i++){
				cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Wert: &quot;;
				cin &gt;&gt; dVec[i];
				}
		Vektoren Vektor( dVec , &amp;this-&gt;iDim );
		cout &lt;&lt; endl &lt;&lt; &quot;Der Vektor hat die Laenge: &quot; &lt;&lt; Vektor.fVecLength() &lt;&lt; endl;
		cout &lt;&lt; &quot;Druecke eine Taste um fortzufahren&quot; &lt;&lt; endl;
		getch();
		}

void Menu::fSkalarprodukt(){

					Vektoren VektorA;
					Vektoren VektorB;
					Vektoren VektorC;

					cout &lt;&lt; &quot;Anzahl Dimensionen: &quot;;
					cin &gt;&gt; this-&gt;iDim;

					cout &lt;&lt; endl &lt;&lt; &quot;Dim: &quot; &lt;&lt;  this-&gt;iDim &lt;&lt; endl;

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres ersten Vektors ein: &quot; &lt;&lt; endl;
					for(int i = 0; i &lt; this-&gt;iDim ;i++){
						cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec1[i];
						}

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres zweiten Vektors ein: &quot; &lt;&lt; endl;
					for(int j = 0; j &lt; this-&gt;iDim ;j++){
						cout &lt;&lt; endl &lt;&lt; j+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec2[j];
						}

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres dritten Vektors ein: &quot; &lt;&lt; endl;
					for(int k = 0; k &lt; this-&gt;iDim ;k++){
						cout &lt;&lt; endl &lt;&lt; k+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec3[k];
						}

					VektorA.fSetWerte(dVec1,&amp;iDim);
					VektorB.fSetWerte(dVec2,&amp;iDim);
					VektorC.fSetWerte(dVec3,&amp;iDim);

					VektorA.fGetWerte();
					VektorB.fGetWerte();
					VektorC.fGetWerte();

					VektorA.fVecSkalar( dVec2 );
					cout &lt;&lt; &quot;Druecke eine Taste um fortzufahren&quot; &lt;&lt; endl;
					getch();
}
</code></pre>
<p>Vektoren-Header</p>
<pre><code>#ifndef VEKTOREN_H
#define VEKTOREN_H

class Vektoren
{
	private:
		unsigned int iXyz; //Anzahl Dimensionen des Vektors

		double dVec[]; //Vektor

	public:
				//Konstruktor
		//Vektoren(double dVec[],int iXyz);
		Vektoren();
		Vektoren(double *dVec,int *iXyz);
				//Destruktor
		~Vektoren();

				//Set-Funktion
		void fSetWerte(double *dVec,int *iXyz);		
				//Get-Funktionen
		void fGetWerte();
		double fGetVektor();

				//Rechenfunktionen
		double fVecLength();
		double fVecSkalar(double *dVecOther);
		double fVecEinheit(double* vector);
		double fVecWinkel(double* vec1, double* vec2);

};

#endif // VEKTOREN_H
</code></pre>
<p>Vektoren.cpp</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot; 

using namespace std;

// class constructor
Vektoren::Vektoren(double *dVec,int *iXyz)
{
	this-&gt;iXyz = *iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
	this-&gt;dVec[i] = dVec[i];
	}
}

Vektoren::Vektoren(){ }
// class destructor
Vektoren::~Vektoren()
{
	cout &lt;&lt; endl &lt;&lt; &quot;ACHTUNG! Vektor-Objekt zerstört!&quot; &lt;&lt; endl;
}

//Get-Funktionen
void Vektoren::fGetWerte(){
	cout &lt;&lt; endl &lt;&lt; &quot;Dimensionen: &quot; &lt;&lt; this-&gt;iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Komponente: &quot; &lt;&lt; this-&gt;dVec[i];
	}
	cout &lt;&lt; endl;
}

double Vektoren::fGetVektor(){
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		dVec[i] = this-&gt;dVec[i];	
	}
	return dVec[iXyz];
}

//Set-Funktionen
void Vektoren::fSetWerte(double *dVec, int *iXyz){
	this-&gt;iXyz = *iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		this-&gt;dVec[i] = dVec[i];
		}
	}

		//Skalarprodukt
double Vektoren::fVecSkalar( double *dVecOther ){
	double dVec2;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		cout &lt;&lt; &quot;This: &quot; &lt;&lt; dVec[i] &lt;&lt; endl &lt;&lt; &quot;Other: &quot; &lt;&lt; dVecOther[i] &lt;&lt; endl;
		dVec2 += this-&gt;dVec[i] * dVecOther[i];
	}

	return dVec2; 
}

		//Länge des Vektors
double Vektoren::fVecLength( ){
	double dVec2;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		dVec2 += pow( this-&gt;dVec[i] , 2 );
	}
	return sqrt(dVec2);
}
/*
		//Einheitsvektor mit Komponenten
inline double fVecEinheit(double* vector){
	double dVecLength = fVecLength(vector);
	vector[0] = vector[0]/dVecLength;
	vector[1] = vector[1]/dVecLength;
	vector[2] = vector[2]/dVecLength;
	cout &lt;&lt; vector[0] &lt;&lt; endl
		 &lt;&lt; vector[1] &lt;&lt; endl
		 &lt;&lt; vector[2] &lt;&lt; endl;
	return fVecLength( vector );
}

		//Winkelfunktion
double fVecWinkel(double* vec1, double* vec2){
	return acos( (fVecSkalar(vec1,vec2))/(fVecLength(vec1)*fVecLength(vec2)));	
}

*/
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/312802/frage-problem-klasse-a-erstellt-instanz-aus-klasse-b</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 17:50:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/312802.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jan 2013 17:17:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 17:17:36 GMT]]></title><description><![CDATA[<p>Hallo C++ Community!</p>
<p>Ich beschäftige mich derzeit mit dem Konzept von OOP, sowie Syntax und Semantik.<br />
Nun bin ich auf folgendes Problem gestoßen:</p>
<p>Es wurden zwei Klassen erstellt: Menu und Vektoren.<br />
In der Main-Funktion wird lediglich eine Instanz oMenu erstellt, welche auch direkt folgendermaßen geöffnet wird:<br />
oMenu.fMenu();</p>
<p>Nun besteht die Auswahl verschiedene Rechenoperationen durchzuführen.<br />
Für die Berechnung des Skalarproduktes sind zwei Vektoren erforderlich.<br />
Nun wird die Dimension abgefragt und die Werte, welche in einem Array gespeicher werden (abhängig von der Dimension).<br />
Nun erstellen wir also zwei Instanzen VektorA und VektorB aus der Klasse Vektoren und übergeben die Werte Dimension und die Arrays (entweder als Konstruktor oder als Funktion fSetWerte).<br />
Die Werte können mittels einer Funktion fGetWerte abgerufen werden.</p>
<p>Und hier ist das Problem:<br />
Wenn VektorA seine Werte übergeben bekommt sind diese zunächst abrufbar. Allerdings ist dies nicht mehr möglich, wenn der zweite VektorB seine Werte übergeben bekommt. Dann sind nur noch die Werte von VektorB abrufbar. Die von VektorA werden gelöscht.<br />
Wo ist hier das Problem?</p>
<p>Ich benutze Dev C++ und den Compiler TDM-GCC 4.6.1 64-bit (Windows 8).</p>
<p>Hoffentlich kennt sich einer mit diesem Problem aus und kann mir sagen,<br />
was genau hier schief läuft.</p>
<p>Vielen Dank im Voraus!! <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="🙂"
    /></p>
<p>Hier ist der/die Code/s:<br />
Anmerkung: Zu Testzwecken wurde noch ein dritter VektorC erstellt, um das Problem zu ermitteln.</p>
<p>Main-Funktion:</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot;
#include &quot;menu.h&quot;

using namespace std;

int main(int argc, char *argv[]) {
	Menu oMenu;
	while(true){oMenu.fMenu();}
	return 0;
}
</code></pre>
<p>Menu-Header</p>
<pre><code>#ifndef MENU_H
#define MENU_H

using namespace std;

class Menu
{
	private:
		char cAuswahl;
		int iDim;
		double dVec1[3], dVec2[3], dVec3[3];

	public:
		//Konstruktor//
		Menu();
		//Destruktor//
		~Menu();

		//Menüaufruf
		void fMenu(void);

		//Rechenaufruf
		void fVektorlaenge();
		void fSkalarprodukt();

		//Set-Funktionen
		char setAuswahl();
};

#endif // MENU_H
</code></pre>
<p>Menu.cpp</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot; 
#include &quot;menu.h&quot; // class's header file

using namespace std;

//Konstruktor//
Menu::Menu(){}
//Destruktor//
Menu::~Menu(){cout &lt;&lt; &quot;Menu zerstoert&quot;;}

void Menu::fMenu(){

	while(true){
		system(&quot;cls&quot;);
		cout &lt;&lt; endl &lt;&lt; endl
			 &lt;&lt; &quot;Rechner Vektoren&quot; &lt;&lt; endl
			 &lt;&lt; &quot;Funktionen:&quot; &lt;&lt; endl 
			 &lt;&lt; &quot;1: Vektorlaenge&quot;&lt;&lt;endl
			 &lt;&lt; &quot;2: Skalarprodukt &quot; &lt;&lt; endl
			 &lt;&lt; &quot;3: Einheitsvektor &quot; &lt;&lt; endl
			 &lt;&lt; &quot;4: Winkel zwischen zwei Vektoren &quot; &lt;&lt; endl
			 &lt;&lt; &quot;5: Vektor-Addition&quot; &lt;&lt; endl
			 &lt;&lt; &quot;6: Vektor-Subtraktion&quot; &lt;&lt; endl
			 &lt;&lt; &quot;e: Exit&quot; &lt;&lt;endl&lt;&lt;endl;

		this-&gt;cAuswahl = getch();

		switch(this-&gt;cAuswahl){
				case '1':
					return fVektorlaenge();
					break;

			    case '2':
					fSkalarprodukt();
					break;
				/*
			case '3':
				{
				double vector[3];
				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 1 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vector[0];
				cin &gt;&gt; vector[1];
				cin &gt;&gt; vector[2];
				cout &lt;&lt; endl &lt;&lt; fVecEinheit(vector) &lt;&lt; endl;
				}
				break;

			case '4':
				{
				double vec2[3], vec1[3];
				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 1 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vec1[0];
				cin &gt;&gt; vec1[1];
				cin &gt;&gt; vec1[2];

				cout&lt;&lt; &quot;Geben Sie die Koordinaten x y z des Vektors 2 ein: &quot; &lt;&lt; endl;
				cin &gt;&gt; vec2[0];
				cin &gt;&gt; vec2[1];
				cin &gt;&gt; vec2[2];

				cout&lt;&lt;endl &lt;&lt; fVecWinkel(vec1,vec2) &lt;&lt; endl;
				}
				break;
			*/
			case 'e':
				exit(0);
			default:
				cout&lt;&lt; &quot;Fail&quot;;
				break;
		}

	}

	return;
}

void Menu::fVektorlaenge(){
		cout &lt;&lt; &quot;Anzahl Dimensionen: &quot;;
		cin &gt;&gt; this-&gt;iDim;
		double dVec[iDim];
		cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres Vektors ein: &quot; &lt;&lt; endl;
		for(int i = 0;i&lt;this-&gt;iDim;i++){
				cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Wert: &quot;;
				cin &gt;&gt; dVec[i];
				}
		Vektoren Vektor( dVec , &amp;this-&gt;iDim );
		cout &lt;&lt; endl &lt;&lt; &quot;Der Vektor hat die Laenge: &quot; &lt;&lt; Vektor.fVecLength() &lt;&lt; endl;
		cout &lt;&lt; &quot;Druecke eine Taste um fortzufahren&quot; &lt;&lt; endl;
		getch();
		}

void Menu::fSkalarprodukt(){

					Vektoren VektorA;
					Vektoren VektorB;
					Vektoren VektorC;

					cout &lt;&lt; &quot;Anzahl Dimensionen: &quot;;
					cin &gt;&gt; this-&gt;iDim;

					cout &lt;&lt; endl &lt;&lt; &quot;Dim: &quot; &lt;&lt;  this-&gt;iDim &lt;&lt; endl;

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres ersten Vektors ein: &quot; &lt;&lt; endl;
					for(int i = 0; i &lt; this-&gt;iDim ;i++){
						cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec1[i];
						}

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres zweiten Vektors ein: &quot; &lt;&lt; endl;
					for(int j = 0; j &lt; this-&gt;iDim ;j++){
						cout &lt;&lt; endl &lt;&lt; j+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec2[j];
						}

					cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres dritten Vektors ein: &quot; &lt;&lt; endl;
					for(int k = 0; k &lt; this-&gt;iDim ;k++){
						cout &lt;&lt; endl &lt;&lt; k+1 &lt;&lt; &quot;. Wert: &quot;;
						cin &gt;&gt; dVec3[k];
						}

					VektorA.fSetWerte(dVec1,&amp;iDim);
					VektorB.fSetWerte(dVec2,&amp;iDim);
					VektorC.fSetWerte(dVec3,&amp;iDim);

					VektorA.fGetWerte();
					VektorB.fGetWerte();
					VektorC.fGetWerte();

					VektorA.fVecSkalar( dVec2 );
					cout &lt;&lt; &quot;Druecke eine Taste um fortzufahren&quot; &lt;&lt; endl;
					getch();
}
</code></pre>
<p>Vektoren-Header</p>
<pre><code>#ifndef VEKTOREN_H
#define VEKTOREN_H

class Vektoren
{
	private:
		unsigned int iXyz; //Anzahl Dimensionen des Vektors

		double dVec[]; //Vektor

	public:
				//Konstruktor
		//Vektoren(double dVec[],int iXyz);
		Vektoren();
		Vektoren(double *dVec,int *iXyz);
				//Destruktor
		~Vektoren();

				//Set-Funktion
		void fSetWerte(double *dVec,int *iXyz);		
				//Get-Funktionen
		void fGetWerte();
		double fGetVektor();

				//Rechenfunktionen
		double fVecLength();
		double fVecSkalar(double *dVecOther);
		double fVecEinheit(double* vector);
		double fVecWinkel(double* vec1, double* vec2);

};

#endif // VEKTOREN_H
</code></pre>
<p>Vektoren.cpp</p>
<pre><code>#include &lt;iostream&gt; 
#include &lt;iomanip&gt;
 #include &lt;cstdlib&gt; 
 #include &lt;cstdio&gt;
 #include &lt;string&gt;
 #include &lt;bitset&gt;
 #include &lt;math.h&gt;
 #include &lt;cmath&gt;
 #include &lt;conio.h&gt;

#include &quot;vektoren.h&quot; 

using namespace std;

// class constructor
Vektoren::Vektoren(double *dVec,int *iXyz)
{
	this-&gt;iXyz = *iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
	this-&gt;dVec[i] = dVec[i];
	}
}

Vektoren::Vektoren(){ }
// class destructor
Vektoren::~Vektoren()
{
	cout &lt;&lt; endl &lt;&lt; &quot;ACHTUNG! Vektor-Objekt zerstört!&quot; &lt;&lt; endl;
}

//Get-Funktionen
void Vektoren::fGetWerte(){
	cout &lt;&lt; endl &lt;&lt; &quot;Dimensionen: &quot; &lt;&lt; this-&gt;iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Komponente: &quot; &lt;&lt; this-&gt;dVec[i];
	}
	cout &lt;&lt; endl;
}

double Vektoren::fGetVektor(){
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		dVec[i] = this-&gt;dVec[i];	
	}
	return dVec[iXyz];
}

//Set-Funktionen
void Vektoren::fSetWerte(double *dVec, int *iXyz){
	this-&gt;iXyz = *iXyz;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		this-&gt;dVec[i] = dVec[i];
		}
	}

		//Skalarprodukt
double Vektoren::fVecSkalar( double *dVecOther ){
	double dVec2;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		cout &lt;&lt; &quot;This: &quot; &lt;&lt; dVec[i] &lt;&lt; endl &lt;&lt; &quot;Other: &quot; &lt;&lt; dVecOther[i] &lt;&lt; endl;
		dVec2 += this-&gt;dVec[i] * dVecOther[i];
	}

	return dVec2; 
}

		//Länge des Vektors
double Vektoren::fVecLength( ){
	double dVec2;
	for(int i = 0; i &lt; this-&gt;iXyz;i++){
		dVec2 += pow( this-&gt;dVec[i] , 2 );
	}
	return sqrt(dVec2);
}
/*
		//Einheitsvektor mit Komponenten
inline double fVecEinheit(double* vector){
	double dVecLength = fVecLength(vector);
	vector[0] = vector[0]/dVecLength;
	vector[1] = vector[1]/dVecLength;
	vector[2] = vector[2]/dVecLength;
	cout &lt;&lt; vector[0] &lt;&lt; endl
		 &lt;&lt; vector[1] &lt;&lt; endl
		 &lt;&lt; vector[2] &lt;&lt; endl;
	return fVecLength( vector );
}

		//Winkelfunktion
double fVecWinkel(double* vec1, double* vec2){
	return acos( (fVecSkalar(vec1,vec2))/(fVecLength(vec1)*fVecLength(vec2)));	
}

*/
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2289632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289632</guid><dc:creator><![CDATA[Zargi]]></dc:creator><pubDate>Mon, 14 Jan 2013 17:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 18:12:16 GMT]]></title><description><![CDATA[<p>Warum sind die Werte dann nicht mehr abrufbar?<br />
Und dein Code ist nicht sonderlich schön anzusehen, gewöhne dir bitte den ungarischen Stil ab...<br />
Außerdem hast du ein Problem: du verwendest Arrays fester Länge, lässt den Benutzer aber eine beliebige Anzahl an Werten eingeben, das könnte Probleme geben.<br />
Und warum sind die Funktionen für das Skalarprodukt und die Länge nicht Teil der Vektor-Klasse?<br />
Und warum brauchst du überhaupt eine Menü-Klasse, genau für sowas ist eigentlich die Main da...<br />
Mache dich bitte mal mit <a href="http://www.cplusplus.com/reference/vector/" rel="nofollow">Vektoren</a> (da einfach nur als Array dynamisch wachsender Größe) vertraut.<br />
Und schreibe dann die Vektoren-Klasse um, dass sie kein Array, sondern einen std::vector verwendet, dass macht die Sache für dich einfacher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289645</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 14 Jan 2013 18:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 18:32:42 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine schnelle Antwort!</p>
<blockquote>
<p>Warum sind die Werte dann nicht mehr abrufbar?</p>
</blockquote>
<p>Eine sehr gute Frage! Deren Antwort ich leider nicht weiß und mich deswegen entschlossen hatte an dieses Forum zu wenden.</p>
<blockquote>
<p>Außerdem hast du ein Problem: du verwendest Arrays fester Länge, lässt den Benutzer aber eine beliebige Anzahl an Werten eingeben, das könnte Probleme geben.</p>
</blockquote>
<p>double dVec1[3], dVec2[3], dVec3[3];<br />
Das ist wahr, hatte ich wohl vergessen zu erwähnen:<br />
Zu Testzwecken habe ich das Array auf 3 gesetzt und nicht mehr umgeändert.</p>
<p>Der Teil, in dem die Werte in Abhängigkeit der Dimension iDim in das Array eingelesen werden.</p>
<pre><code>cout&lt;&lt; endl &lt;&lt; &quot;Geben Sie Werte ihres ersten Vektors ein: &quot; &lt;&lt; endl;
                    for(int i = 0; i &lt; this-&gt;iDim ;i++){
                        cout &lt;&lt; endl &lt;&lt; i+1 &lt;&lt; &quot;. Wert: &quot;;
                        cin &gt;&gt; dVec1[i];
                        }
</code></pre>
<blockquote>
<p>Und dein Code ist nicht sonderlich schön anzusehen, gewöhne dir bitte den ungarischen Stil ab...</p>
</blockquote>
<p>Mhh.. eigentlich finde ich den gar nicht so schlecht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Man erkennt sofort, um welchen Typ es sich handelt.</p>
<blockquote>
<p>Und warum sind die Funktionen für das Skalarprodukt und die Länge nicht Teil der Vektor-Klasse?<br />
Und warum brauchst du überhaupt eine Menü-Klasse, genau für sowas ist eigentlich die Main da...</p>
</blockquote>
<p>Ich hatte die Funktionen etc alle bereits fertig und mich entschieden das Ganze als Klasse umzuschreiben.<br />
Wie ich was mache und wie man es richtig macht ist mir in erster Linie nicht wichtig. Es geht um das eigentliche Problem: Warum werden die Werte von der zuletzt erstellen Instanz Vektor gelöscht, wenn ich eine neue Instanz Vektor erstelle? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289648</guid><dc:creator><![CDATA[Zargi]]></dc:creator><pubDate>Mon, 14 Jan 2013 18:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 18:51:26 GMT]]></title><description><![CDATA[<p>OK, der Stil ist deine Sache.<br />
Habe mir das jetzt erst genauer angeguckt<br />
1. Warum nennst du die Größe iXyz? Warum nicht size oder (meinetwegen auch) iSize?<br />
2. double dVec[] ist das gleiche wie double *dVec. Du musst erst dynamisch Speicher anfordern.<br />
3. Die Größe der Set-Funktion wird als Pointer übergeben?! Und dann werden wahllos im Arbeitsspeicher Werte geschrieben?! Es ist ein Wunder, dass dein Programm nicht crasht. Nutze sowas wie:</p>
<pre><code>void setVector(double vals, std::size_t size)
{
    dVec = new double [size];
    // mit Werten füllen
}
</code></pre>
<p>4. Deine GetVektor Funktion ist auch Schrott. dVec und this-&gt;dVec ist das gleiche. Erst weist du in einer Schleife jedem einzelnen Element den gleichen Wert hinzu (soetwas wie i = i) und dann returnst du ein Element des Vektors hinter dem eigentlcihen Array?! Das ist fatal...</p>
<p>Entweder du schreibst die Klasse komplett um oder du verwendest std::vector (Link weiter oben), da sparst du dir das.<br />
Edit: Dann kannst du dir die Klasse aber auch sparen, weil sie dann nur eine Schnittstelle zu std::vector ist und sie direkt so im Menü verwenden oder du musst die Vektor-spezifischen Funktionen ebenfalls da mit reinpacken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289653</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 14 Jan 2013 18:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 19:00:06 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>2. double dVec[] ist das gleiche wie double *dVec. Du musst erst dynamisch Speicher anfordern.</p>
</blockquote>
<p>Genaugenommen ist es etwas völlig anderes.</p>
<pre><code class="language-cpp">double dVec[];
</code></pre>
<p>deklariert ein Array mit unbestimmter Größe. Und weil das hier eine Definition ist, aber kein Initialisierer angegeben ist, aus dem die Größe hervorgeht, ist diese Definiton schlicht ill-formed. Kann natürlich sein, das ein hirnloser Compiler daraus einen Zeiger macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289656</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 14 Jan 2013 19:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage&#x2F;Problem: Klasse A erstellt Instanz aus Klasse B on Mon, 14 Jan 2013 19:03:40 GMT]]></title><description><![CDATA[<p>Ja? Oh, da hatte ich mich geirrt.<br />
Ich dachte nur an Funktionsparameter, da wird daraus ein Zeiger.<br />
Na ja, wieder was gelernt. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2289657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2289657</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 14 Jan 2013 19:03:40 GMT</pubDate></item></channel></rss>