<?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[Klasse als Attribut einer anderen Klasse]]></title><description><![CDATA[<p>Klasse als Attribut einer anderen Klasse</p>
<p>Hallo zusammen,</p>
<p>bin noch ziemlich am Anfang der objetorientierten Programmierung in C++ und schreibe gerade an einem Programm, in welchem Studenten in Kurse eingetragen werden können. Die Kurse können dann<br />
wiederrum mit Informationen über alle teilnehmenden Studenten in der Konsole ausgegeben werden.</p>
<p>Ich habe jetzt also meine beiden Klassen student und kurs wie folgt initialisiert:</p>
<pre><code>class student{

	//Deklaration der Klassen-Attribute
	private:
	string name, vorname, hochschule;
	int matnr;
	bool intern;

	public:
	void new_student(string n, string vn, string hs, int nr, bool in){	//Methode zur Anlage eines neuen Studenten mit Übergabeparametern
		name = n;
		vorname = vn;
		hochschule = hs;
		matnr = nr;
		intern = in;
	}

	//Getter-Methoden
	[...]
};

class kurs{

	//Deklaration der Klassen-Attribute
	private:
	string name;
	int kursnr; //eindeutige Ident-Nr eines Kurses
	int teilnehmerzahl;
	student teilnehmer[10];

	public:
	kurs(string n, int nr):teilnehmerzahl(0){	//Deklaration u. Definition des Konstruktors mit ELI für Defaultwert
	name = n;
    	kursnr = nr;
	}

	//Getter-Methoden
	[...]

	//Methode zur Aufnahme eines Studenten

	void student_aufnehmen(student s){
		if(teilnehmerzahl &lt; 10){

			teilnehmerzahl++;
			cout &lt;&lt; &quot;Sie wurden erfolgreich in den Kurs eingetragen!&quot;;
		}
		else{
			cout &lt;&lt; &quot;Kurs ist voll!&quot;;
		}
	}
};
</code></pre>
<p>Mein Problem liegt nun bei der Methode student_aufnehmen(), welche einen Studenten einem Kurs zuordnen soll. Klar, aktuell passiert in der Methode nicht viel, nur scheiterten alle meine bisherigen versuche am Compiler.</p>
<p>Mein Ansatz wäre gewesen: in der Klasse Kurs als Attribut ein Array teilnehmer[10] vom Datentyp Student aufzunehmen (max. 10 Telnehmer pro Kurs). In der Methode student_aufnehmen() sollte dann dem Attribut (z.B. teilnehmer[0]) ein Studenten-Objekt zugewiesen werden. Meines Wissens nach ist es doch möglich, nachdem man eine Klasse deklariert hat, diese auch in anderen Klassen wie einen Datentyp zu behandeln, oder? Ich bekomme mit obigem Code jedenfalls folgenden Compiler-Fehler:</p>
<pre><code>[Error] 'student' does not name a type
</code></pre>
<p>Kann mir jemand weiterhelfen, was ich hier übersehen habe bzw. wo der Denkfehler liegt? Habe schon einige Zeit rumprobiert und bekomm es nicht hin.</p>
<p>Dankeschön &amp; Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335867/klasse-als-attribut-einer-anderen-klasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 03:50:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335867.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Dec 2015 18:01:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 18:01:31 GMT]]></title><description><![CDATA[<p>Klasse als Attribut einer anderen Klasse</p>
<p>Hallo zusammen,</p>
<p>bin noch ziemlich am Anfang der objetorientierten Programmierung in C++ und schreibe gerade an einem Programm, in welchem Studenten in Kurse eingetragen werden können. Die Kurse können dann<br />
wiederrum mit Informationen über alle teilnehmenden Studenten in der Konsole ausgegeben werden.</p>
<p>Ich habe jetzt also meine beiden Klassen student und kurs wie folgt initialisiert:</p>
<pre><code>class student{

	//Deklaration der Klassen-Attribute
	private:
	string name, vorname, hochschule;
	int matnr;
	bool intern;

	public:
	void new_student(string n, string vn, string hs, int nr, bool in){	//Methode zur Anlage eines neuen Studenten mit Übergabeparametern
		name = n;
		vorname = vn;
		hochschule = hs;
		matnr = nr;
		intern = in;
	}

	//Getter-Methoden
	[...]
};

class kurs{

	//Deklaration der Klassen-Attribute
	private:
	string name;
	int kursnr; //eindeutige Ident-Nr eines Kurses
	int teilnehmerzahl;
	student teilnehmer[10];

	public:
	kurs(string n, int nr):teilnehmerzahl(0){	//Deklaration u. Definition des Konstruktors mit ELI für Defaultwert
	name = n;
    	kursnr = nr;
	}

	//Getter-Methoden
	[...]

	//Methode zur Aufnahme eines Studenten

	void student_aufnehmen(student s){
		if(teilnehmerzahl &lt; 10){

			teilnehmerzahl++;
			cout &lt;&lt; &quot;Sie wurden erfolgreich in den Kurs eingetragen!&quot;;
		}
		else{
			cout &lt;&lt; &quot;Kurs ist voll!&quot;;
		}
	}
};
</code></pre>
<p>Mein Problem liegt nun bei der Methode student_aufnehmen(), welche einen Studenten einem Kurs zuordnen soll. Klar, aktuell passiert in der Methode nicht viel, nur scheiterten alle meine bisherigen versuche am Compiler.</p>
<p>Mein Ansatz wäre gewesen: in der Klasse Kurs als Attribut ein Array teilnehmer[10] vom Datentyp Student aufzunehmen (max. 10 Telnehmer pro Kurs). In der Methode student_aufnehmen() sollte dann dem Attribut (z.B. teilnehmer[0]) ein Studenten-Objekt zugewiesen werden. Meines Wissens nach ist es doch möglich, nachdem man eine Klasse deklariert hat, diese auch in anderen Klassen wie einen Datentyp zu behandeln, oder? Ich bekomme mit obigem Code jedenfalls folgenden Compiler-Fehler:</p>
<pre><code>[Error] 'student' does not name a type
</code></pre>
<p>Kann mir jemand weiterhelfen, was ich hier übersehen habe bzw. wo der Denkfehler liegt? Habe schon einige Zeit rumprobiert und bekomm es nicht hin.</p>
<p>Dankeschön &amp; Viele Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479776</guid><dc:creator><![CDATA[gojbdn]]></dc:creator><pubDate>Wed, 16 Dec 2015 18:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 18:06:46 GMT]]></title><description><![CDATA[<p>So wie du es beschreiben hast müsste es eigentlich funktionieren. Wie hast du die <code>student</code> und <code>kurs</code> Klasse in Dateien aufgeteilt? Für beides einen Header? Dann musst du in der kurs.h (oder wie auch immer die bei dir heißt) natürlich auch die student.h laden sonst kennt er die <code>student</code> Klasse nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479778</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 16 Dec 2015 18:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 18:12:08 GMT]]></title><description><![CDATA[<p>Daran wirds wohl nicht liegen, habe den ganzen Code in einer Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479781</guid><dc:creator><![CDATA[gojbdn]]></dc:creator><pubDate>Wed, 16 Dec 2015 18:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 18:15:14 GMT]]></title><description><![CDATA[<p>Dann hast du wohl nicht den ganzen relevanten Code gezeigt. Dein Beispiel + Includes und main Funktion compiliert bei mir. In welcher Zeile erhälst du die Fehlermeldung? Welchen Compiler nutzt du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479782</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 16 Dec 2015 18:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 20:05:35 GMT]]></title><description><![CDATA[<p>Also als Compiler benutze ich Dev-C++ von Bloodshed.</p>
<p>Hab jetzt auch einfach mal zum Test nur den von mir angegeben Code übersetzt, hat auch funktioniert. Also muss der Fehler tatsächlich woanders liegen, kann mir aber jetzt nicht vorstellen wo.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cstdlib&gt;

using namespace std;

//Deklaration der benötigten Klassen

class student{

	//Deklaration der Klassen-Attribute
	private:
	string name, vorname, hochschule;
	int matnr;
	bool intern;

	public:
	void new_student(string n, string vn, string hs, int nr, bool in){	//Methode zur Anlage eines neuen Studenten mit Übergabeparametern
		name = n;
		vorname = vn;
		hochschule = hs;
		matnr = nr;
		intern = in;
	}

	//Getter-Methoden zur Ausgabe der Studentendaten
		string get_name(){
		return name;
	}

		string get_vorname(){
		return vorname;
	}

		string get_hochschule(){
		return hochschule;
	}

		int get_matnr(){
		return matnr;
	}

		bool get_intern(){
		return intern;
	}
};

student student[30];	//Feld zur Speicherung aller Studentendaten (max 30, da 3 Kurse mit max. 10 Studenten)

class kurs{

	//Deklaration der Klassen-Attribute
	private:
	string name;
	int kursnr; //eindeutige Ident-Nr eines Kurses
	int teilnehmerzahl;
	student teilnehmer[10];

	public:
	kurs(string n, int nr):teilnehmerzahl(0){	//Deklaration u. Definition des Konstruktors mit ELI für Defaultwert
		name = n;
    	kursnr = nr;
	}

	//Getter-Methoden zur Ausgabe der Kursdaten
	string get_name(){
		return name;
	}

	int get_kursnr(){
		return kursnr;
	}

	int get_teilnehmerzahl(){
		return teilnehmerzahl;
	}

	//Methode zur Aufnahme eines Studenten

	void student_aufnehmen(student s){
		if(teilnehmerzahl &lt; 10){

			teilnehmerzahl++;
			cout &lt;&lt; &quot;Sie wurden erfolgreich in den Kurs eingetragen!&quot;;
		}
		else{
			cout &lt;&lt; &quot;Kurs ist voll!&quot;;
		}
	}
};

//Funktionen fuer einzelne Menüpunkte

//Menüpunkt 1
void mp1(){
	//Deklaration der lokalen Eingabeparameter
	string n, vn, hs;
	int nr;
	bool in;
	static int i = 0;	//Laufindex für Studenten
	int auswahl;	//Variable für Kurswahl

	//Dialog zur eingabe der Studentendaten
	cout &lt;&lt; endl &lt;&lt;&quot;1 // Registrierung fuer einen Kurs&quot; &lt;&lt; endl &lt;&lt; &quot;**********************************&quot; &lt;&lt; endl &lt;&lt; endl;
	cout &lt;&lt; &quot;Bitte nachfolgende Daten eingeben:&quot; &lt;&lt; endl &lt;&lt; &quot;Nachname: &quot;;
	cin &gt;&gt; n;
	cout &lt;&lt; &quot;Vorname: &quot;;
	cin &gt;&gt; vn;
	cout &lt;&lt; &quot;Sind Sie Student der THD oder einer externen Hochschule? Bitte *1* fuer THD eingeben und *0* fuer extern: &quot;;
	cin &gt;&gt; in;
	if(!in){	//Eingabe der Hochschule, wenn Student extern ist
		cout &lt;&lt; &quot;Bitte Hochschule eingeben: &quot;;
		cin &gt;&gt; hs;
	}
	else{	//Hochschule = THD, wenn Student intern ist
		hs = &quot;THD&quot;;
	}
	cout &lt;&lt; &quot;Matrikelnummer: &quot;;
	cin &gt;&gt; nr;

	student[i].student::new_student(n, vn, hs, nr, in);	//erzeugen des Studenten mit den eingegebenen Daten

	cout &lt;&lt; endl &lt;&lt; &quot;Vielen Dank! Ihre Daten wurden in das System eingetragen (&quot; &lt;&lt; student[i].student::get_name() &lt;&lt; &quot;, &quot; &lt;&lt; student[i].student::get_vorname() &lt;&lt; &quot;, &quot;;
	cout &lt;&lt; student[i].student::get_hochschule() &lt;&lt; &quot;, Mat. Nr. &quot; &lt;&lt; student[i].student::get_matnr() &lt;&lt; &quot;)&quot; &lt;&lt; endl &lt;&lt; endl;	//Kontrollausgabe

	kurs k1(&quot;Programmierung&quot;, 1), k2(&quot;Datenbanken&quot;, 2), k3(&quot;Software-Engineering&quot;, 3); //Erzeugung der drei Kurse mittels Übergabeparametern an Konstruktor

	//Eintragung in einen Kurs

	cout &lt;&lt; &quot;Sie koennen sich nun in einen Kurs eintragen. Interne Student koennen alle Kurse belegen, externe Studenten nur einen Kurs. Es stehen die Kurse &quot; &lt;&lt; k1.kurs::get_name() &lt;&lt; &quot;(Kursnr. &quot; &lt;&lt; k1.kurs::get_kursnr() &lt;&lt; &quot;), &quot;;
	cout &lt;&lt; k2.kurs::get_name() &lt;&lt; &quot;(Kursnr. &quot; &lt;&lt; k2.kurs::get_kursnr() &lt;&lt; &quot;) und &quot; &lt;&lt; k3.kurs::get_name() &lt;&lt; &quot;(Kursnr. &quot; &lt;&lt; k3.kurs::get_kursnr() &lt;&lt; &quot;) zur Verfuegung. &quot;;
	cout &lt;&lt; endl &lt;&lt; &quot;Bitte geben Sie die Nummer des Kurses ein, in welchen Sie sich eintragen wollen: &quot;;
	cin &gt;&gt; auswahl;

	switch(auswahl){
		case 1:
		k1.kurs::student_aufnehmen();
		break;
		case 2:
		k2.kurs::student_aufnehmen();
		break;
		case 3:
		k3.kurs::student_aufnehmen();
		break;
	}

	if(!student[i].get_intern()){	//wenn Student extern, Rückkehr ins Hauptmenü
		cout &lt;&lt;&quot;Rueckkehr ins Hauptmenue...&quot;;
	}
	else{

		for(int i = 0; student[i].get_intern() &amp;&amp; i &lt; 2; i++){	//wenn Student intern, weitere zweimalige Möglichkeit zur Eintragung
			cout &lt;&lt; endl &lt;&lt; &quot;Sie koennen sich nun in einen weiteren Kurs eintragen. Bitte geben Sie die Nummer des Kurses ein, in welchen Sie sich eintragen wollen, oder eine *0*, um in das Startmenue zurueckzukehren: &quot;;
			cin &gt;&gt; auswahl;

				switch(auswahl){
				case 0:
				i = 2;
				break;
				case 1:
				k1.kurs::student_aufnehmen();
				break;
				case 2:
				k2.kurs::student_aufnehmen();
				break;
				case 3:
				k3.kurs::student_aufnehmen();
				break;
			}
		}
	}

	i++;	//i wird erhöht, um im nächsten Durchlauf neuen Student anlegen zu können

	}

//Menüpunkt 2

void mp2(){
	cout &lt;&lt; endl &lt;&lt;&quot;2 // Ausgabe eines/aller Kurse mit Daten der Kursteilnehmer&quot; &lt;&lt; endl &lt;&lt; &quot;***********************************************************&quot; &lt;&lt; endl &lt;&lt; endl;

}

//Menüpunkt 3

void mp3(){
	cout &lt;&lt; endl &lt;&lt;&quot;2 // Programmende - Anzeige nicht stattfindender Kurse&quot; &lt;&lt; endl &lt;&lt; &quot;******************************************************&quot; &lt;&lt; endl &lt;&lt; endl;
}

int main(){

int auswahl;	//Auswahlvariable für Benutzermenü

do{

	cout &lt;&lt; &quot;PROGRAMM ZUR KURSVERWALTUNG&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;************************************************&quot; &lt;&lt; endl &lt;&lt; endl;
	cout &lt;&lt; &quot;Herzlich Willkommen! Bitte durch Zahleingabe einen Menuepunkt auswaehlen:&quot; &lt;&lt; endl &lt;&lt; endl;
	cout &lt;&lt; &quot;1 // Registrierung fuer einen Kurs&quot; &lt;&lt; endl &lt;&lt; &quot;2 // Ausgabe eines/aller Kurse mit Daten der Kursteilnehmer&quot; &lt;&lt; endl &lt;&lt; &quot;3 // Programmende und Benachrichtigung ueber Ausfallende Kurse&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Auswahl: &quot;;
	cin &gt;&gt; auswahl;

	switch(auswahl){
		case 1:
			mp1();
			break;
		case 2:
			mp2();
			break;
		case 3:
			mp3();
			break;
	}
}
while(auswahl !=3);

system(&quot;pause&quot;);

}
</code></pre>
<p>Hier mein kompletter Code, hoffe das ganze ist jetzt nicht zu umfangreich..</p>
<p>Fehler bekomme ich in<br />
Zeile 59</p>
<pre><code>[Error] 'student' does not name a type
</code></pre>
<p>Zeile 84</p>
<pre><code>[Error] 'student' is not a type
</code></pre>
<p>Zeilen 147,150,153, 171, 174, 177</p>
<pre><code>[Error] no matching function for call to 'kurs::student_aufnehmen()'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479791</guid><dc:creator><![CDATA[gojbdn]]></dc:creator><pubDate>Wed, 16 Dec 2015 20:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 20:20:20 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du das stottern lassen</p>
<pre><code class="language-cpp">student student[30];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2479794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479794</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 16 Dec 2015 20:20:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Wed, 16 Dec 2015 20:25:12 GMT]]></title><description><![CDATA[<p>Dein Fehler ist hier:</p>
<pre><code>student student[30];    //Feld zur Speicherung aller Studentendaten (max 30, da 3 Kurse mit max. 10 Studenten)
</code></pre>
<p>Wenn du dein Array genauso nennst wie die Klasse dann bezeichnet student danach dein Array und nicht mehr deine Klasse. Du müsstest dir also einen anderen Namen für das Array ausdenken wenn das Array nicht sowieso total unnötig wäre. Deine Kurs Klasse speichert doch bereits Kopien von den Studenten also kannst du einfach ein neues lokales Objekt anlegen und das dann an <code>student_aufnehmen()</code> übergeben.</p>
<p>Noch ein paar Anmerkungen:<br />
-Warum schreibst du überall die Klasse dazu? Also z.B. bei <code>k1.kurs::student_aufnehmen();</code> , es reicht völlig wenn man <code>k1.student_aufnehmen();</code> schreibt. Das Angeben der Klasse ist nur bei Vererbung sinnvoll und auch nur dann wenn man explizit eine bestimmte Klasse aufrufen will.<br />
-Warum nutzt du nicht den Konstruktor in der student Klasse statt deiner <code>new_student</code> Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479795</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 16 Dec 2015 20:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse als Attribut einer anderen Klasse on Thu, 17 Dec 2015 08:04:09 GMT]]></title><description><![CDATA[<p>Die IDE von bloodshed ist aus 2005 oder?</p>
<p>Also wenns nicht die überarbeite Version ist, dann schmeiß deine IDE weg und hol dir Visual Studio (angenommen windows).</p>
<p>Eigentlich solltest du dir oder so VS holen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479846</guid><dc:creator><![CDATA[cvcv]]></dc:creator><pubDate>Thu, 17 Dec 2015 08:04:09 GMT</pubDate></item></channel></rss>