<?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[Objekte übergeben]]></title><description><![CDATA[<p>Hallo alle zusammen <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="😉"
    /></p>
<p>Folgendes Problem, um die Software für eine Studienorganisation zu realisieren muss ein CHochschul-Objekt erzeugt werden, um dann ein CStudienorganisator-Objekt zu erzeugen. Um das zu kontrollieren hatte ich eigentlich vor ein CHochschul-Objekt an den Konstruktor von CStudienorganisator zu übergeben. Der Sinn : keine Hochschule -&gt; kein Studienorganisator. Schaut Euch bitte mal folgenden Quelltext an und sagt mir Eure Meinung. Gehts auch anders ???</p>
<p>(Fehlermeldung vom Compiler ganz unten)</p>
<pre><code class="language-cpp">***********
// Main.cpp
***********

#include &quot;CHochschule.h&quot;

#include &lt;stdlib.h&gt;

int main ( )
{
	// create a new CHochschule object
	cout &lt;&lt; &quot;Eine neue Hochschule wurde eingeweiht!&quot; &lt;&lt; endl;
	CHochschule* Hochschule;
	Hochschule = new CHochschule( &quot;HTWK&quot; );

	// get the name of the object
	Hochschule-&gt;getName();

	// create a new CStudienorganisator object
	CStudienorganisator* Studienorganisator;
	Studienorganisator = new CStudienorganisator( &quot;Frau Mueller&quot;, Hochschule );

	// get the name of the object
	Studienorganisator-&gt;getName();

	system(&quot;PAUSE&quot;);
	return 0;
}

______________________________________________________________________________

******************
// CHochschule.cpp
******************

#include &lt;iostream.h&gt;
#include &quot;CStudienorganisator.cpp&quot;

class CHochschule
{
	class CStudienorganisator;

public:
	CHochschule(					// standard constructor
		char*			cName		// name of the object
		);
	~CHochschule(					// standard destructor
		);

	void getName(					// return the name of the object
		);

protected:
	char*				m_cName;	// name of the object

};

______________________________________________________________________________

************************
// CStudienorganisator.h
************************
class CStudienorganisator
{

class CHochschule;

public:
	CStudienorganisator(					// standard constructor
		char*				cName,			// name of the object
		CHochschule*		pCHochschule	// pointer on a CHochschule object
		);
	~CStudienorganisator(					// standard destructor
		);

	void getName(							// print the name of the object
		);

protected:
	char*				m_cName;			// name of the object
	CHochschule*		m_pCHochschule;		// pointer on a CHochschule object

};

______________________________________________________________________________

**************************
// CStudienorganisator.cpp
**************************

#include &quot;CStudienorganisator.h&quot;

#include &lt;stdlib.h&gt;

// *****************************
// *** class implementations ***
// *****************************

//
// constructor
//
CStudienorganisator::CStudienorganisator( char* cName, CHochschule *pCHochschule )
	: m_cName( cName )
	, m_pCHochschule( pCHochschule )
{
}

//
// standard destructor
//
CStudienorganisator::~CStudienorganisator()
{
}

//
// getName()
//	return the name of the object
//
void CStudienorganisator::getName()
{
	cout &lt;&lt; &quot;Der Name des Studienorganisators ist : &quot; &lt;&lt; m_cName &lt;&lt; endl;
}
</code></pre>
<p>/*<br />
c:\HOCHSCHULE\Main.cpp(19): error C2664: 'CStudienorganisator::CStudienorganisator(char *,CStudienorganisator::CHochschule *)' : cannot convert parameter 2 from 'CHochschule' to 'CStudienorganisator::CHochschule *'<br />
*/</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/51523/objekte-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 14:20:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/51523.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Oct 2003 17:03:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte übergeben on Sat, 11 Oct 2003 06:56:08 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen <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="😉"
    /></p>
<p>Folgendes Problem, um die Software für eine Studienorganisation zu realisieren muss ein CHochschul-Objekt erzeugt werden, um dann ein CStudienorganisator-Objekt zu erzeugen. Um das zu kontrollieren hatte ich eigentlich vor ein CHochschul-Objekt an den Konstruktor von CStudienorganisator zu übergeben. Der Sinn : keine Hochschule -&gt; kein Studienorganisator. Schaut Euch bitte mal folgenden Quelltext an und sagt mir Eure Meinung. Gehts auch anders ???</p>
<p>(Fehlermeldung vom Compiler ganz unten)</p>
<pre><code class="language-cpp">***********
// Main.cpp
***********

#include &quot;CHochschule.h&quot;

#include &lt;stdlib.h&gt;

int main ( )
{
	// create a new CHochschule object
	cout &lt;&lt; &quot;Eine neue Hochschule wurde eingeweiht!&quot; &lt;&lt; endl;
	CHochschule* Hochschule;
	Hochschule = new CHochschule( &quot;HTWK&quot; );

	// get the name of the object
	Hochschule-&gt;getName();

	// create a new CStudienorganisator object
	CStudienorganisator* Studienorganisator;
	Studienorganisator = new CStudienorganisator( &quot;Frau Mueller&quot;, Hochschule );

	// get the name of the object
	Studienorganisator-&gt;getName();

	system(&quot;PAUSE&quot;);
	return 0;
}

______________________________________________________________________________

******************
// CHochschule.cpp
******************

#include &lt;iostream.h&gt;
#include &quot;CStudienorganisator.cpp&quot;

class CHochschule
{
	class CStudienorganisator;

public:
	CHochschule(					// standard constructor
		char*			cName		// name of the object
		);
	~CHochschule(					// standard destructor
		);

	void getName(					// return the name of the object
		);

protected:
	char*				m_cName;	// name of the object

};

______________________________________________________________________________

************************
// CStudienorganisator.h
************************
class CStudienorganisator
{

class CHochschule;

public:
	CStudienorganisator(					// standard constructor
		char*				cName,			// name of the object
		CHochschule*		pCHochschule	// pointer on a CHochschule object
		);
	~CStudienorganisator(					// standard destructor
		);

	void getName(							// print the name of the object
		);

protected:
	char*				m_cName;			// name of the object
	CHochschule*		m_pCHochschule;		// pointer on a CHochschule object

};

______________________________________________________________________________

**************************
// CStudienorganisator.cpp
**************************

#include &quot;CStudienorganisator.h&quot;

#include &lt;stdlib.h&gt;

// *****************************
// *** class implementations ***
// *****************************

//
// constructor
//
CStudienorganisator::CStudienorganisator( char* cName, CHochschule *pCHochschule )
	: m_cName( cName )
	, m_pCHochschule( pCHochschule )
{
}

//
// standard destructor
//
CStudienorganisator::~CStudienorganisator()
{
}

//
// getName()
//	return the name of the object
//
void CStudienorganisator::getName()
{
	cout &lt;&lt; &quot;Der Name des Studienorganisators ist : &quot; &lt;&lt; m_cName &lt;&lt; endl;
}
</code></pre>
<p>/*<br />
c:\HOCHSCHULE\Main.cpp(19): error C2664: 'CStudienorganisator::CStudienorganisator(char *,CStudienorganisator::CHochschule *)' : cannot convert parameter 2 from 'CHochschule' to 'CStudienorganisator::CHochschule *'<br />
*/</p>
]]></description><link>https://www.c-plusplus.net/forum/post/370025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/370025</guid><dc:creator><![CDATA[Alexsss]]></dc:creator><pubDate>Sat, 11 Oct 2003 06:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte übergeben on Fri, 10 Oct 2003 17:54:30 GMT]]></title><description><![CDATA[<p><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 />
Kann es sein, dass Du im falschen Forum gelandet bist? Versuchs mal im C++ Forum, nicht beim MFC Forum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/370045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/370045</guid><dc:creator><![CDATA[Physikalischer Fehler]]></dc:creator><pubDate>Fri, 10 Oct 2003 17:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte übergeben on Fri, 10 Oct 2003 23:56:14 GMT]]></title><description><![CDATA[<p><a href="http://c-plusplus.net/forum/viewtopic.php?t=51542" rel="nofollow">http://c-plusplus.net/forum/viewtopic.php?t=51542</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/370177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/370177</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Fri, 10 Oct 2003 23:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte übergeben on Sat, 11 Oct 2003 00:16:41 GMT]]></title><description><![CDATA[<p>Hallo <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>Ja, wo faengt man an ...</p>
<ol>
<li></li>
</ol>
<p>Aehm, du verhaust hier irgendwas mit header und cpp dateien !</p>
<blockquote>
<p>#include &quot;CStudienorganisator.cpp&quot;</p>
</blockquote>
<p>Sieht aeusserst unschoen aus, und faellt sofort auf !</p>
<p>Includen tut man meistens die deklarationen, also die .h dateien, keine cpp dateien ... Ausserdem ist das arbeiten mit forward-Deklarationen hier voellig falsch.</p>
<blockquote>
<p>class CHochschule<br />
{<br />
class CStudienorganisator;</p>
</blockquote>
<p>Deshalb auch die fehlermeldung, du deklarierst 2 mal die Hochschule, einmal als funktionsfaehige klasse, und als Membertyp deiner CStudienorganisator-Klasse. Dass passt dann ned ...</p>
<p>2. du schreibst klassen, also C++<br />
als strings nimm lieber STL Strings und keine C Strings<br />
Apropo</p>
<pre><code class="language-cpp">new CHochschule( &quot;HTWK&quot; );
</code></pre>
<p>wuerde auch ned funktionieren, weil der Parameter vom Construktor *char ist, aber &quot;HTWK&quot; ne Constante Zeichenkette, wird er dir anmeckern !</p>
<p>3. Kommentare in der Parameterliste und die zeilenumbrueche machen die ganze sache irgendwie unleserlich ... ist geschmacksache, aber mich verwirrts</p>
<ol start="4">
<li></li>
</ol>
<blockquote>
<p>Studienorganisator-&gt;getName();</p>
</blockquote>
<p>Ich nehm an die methode macht irgendwas schweiniges auf der Standardausgabe oder so <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="🙂"
    /> kann man machen, ist aber eher irgendwie unflexibel, gib der methode wenigstens nen parameter mit, wo sie das Zeugs hinschreiben soll ... oder noch viel besser, lass die Klassen einfach nur ihren Namen zruueckgeben, und kuemmer dich ums ausgeben an anderen Stellen ... sonst kommst bei spaeteren Erweiterungen schnell in Huddelein ... Ned so viele Themen in eine Klasse packen !</p>
<p>deine Hochschulklasse sollte dan in etwa so aussehen :</p>
<pre><code class="language-cpp">****************** 
// Hochschule.h 
****************** 
#include &lt;string&gt;

class CHochschule 
{ 
public: 
    // CTor gleich mit namen ! 
    CHochschule(const std::string astrName); 
    // DTor 
    virtual ~CHochschule(); // Destruktor virtual ... falls du mal von der Klasse ableiten willst 
    // Namen zurueckliefern 
    const std::string&amp;  getName() const;  // Memberfunktion constant machen, damit sie auch auf constanten Instanzen funzt 
    // und als rueckgabewert ne constante referenz auf nen std::string vermeidet kopiererei,
protected: 
    // Members
    // name of the object ... und warum nicht gleich constant, aendert sich ja auch nie
    const std::string  m_strName;  

};
</code></pre>
<p>und die Zugehoerige Implementation</p>
<pre><code class="language-cpp">****************** 
// Hochschule.cpp 
****************** 
// den CTor
CHochschule::CHochschule(const std::string astrName):
m_strName(astrName) // da die membervariable constant ist, zuweisung ueber init-Liste
{
}
// der DTor
CHochschule::~CHochschule()
{
    // der Dtor brauch gar nix machen, weil der String aus der STL clever ist und sich selber loescht ... 
}
// den namen zurueckgeben 
const std::string&amp;  CHochschule::getName() const
{
    return m_strName; // einfach als refernz den member zurueckgeben ... darf sowieso keiner veraendern 
}
</code></pre>
<p>Deine Studienorganisatorklasse, solltest nu selber entwerfen koennen</p>
<p>noch nen Tipp !</p>
<blockquote>
<p>Der Sinn : keine Hochschule -&gt; kein Studienorganisator.</p>
</blockquote>
<pre><code class="language-cpp">CStudienorganisator( // standard constructor 
char* cName, // name of the object 
CHochschule* pCHochschule // pointer on a CHochschule object 
);
</code></pre>
<p>wenn nen Zeiger als parameter uebergibst, kann der Zeiger auch Null sein ... das widerspricht deiner Logic ...<br />
Bessser ! Speicher dir kein Zeiger auf die Hochschule, sondern Halte Ne referenz !</p>
<p>Sprich, membervariable vom Typ:<br />
const CHochschule &amp; m_Hochschule;<br />
und dem Konstruktor auch ne referenz ... oder noch besser, mach beides als constante refernz, wenn der Studienorganisator ned auf der Hochschule rumschreiben tut ... (da die mebervariable protected machen willst, nehm ich an du willst ableiten ... und da hat der parent zugriff auf die Variable ... also schuetze sie vor missbrauch)</p>
<pre><code class="language-cpp">CStudienorganisator::CStudienorganisator(const std::string astrName,const CHochschule &amp; a_hochschule):
m_Hochschule(a_hochschule),
m_strName(astrName)
{
}
</code></pre>
<p>Waer nen brauchbarer Construktor ...</p>
<p>Noch nen Letzter Tipp<br />
das C vor Klassennamen ist Geschmackssache, meiner meinung nach schlechter Geschmack <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="😃"
    /> <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="😃"
    /> <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="😃"
    /> Errinert zu sehr an ne Klassenbiblo von M$, weswegen der Post auch sicher hier gelandet ist ... <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 />
Nimm lieber nen Namespace, wenn deine Klassen Kennzeichnen Willst ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/370178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/370178</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Sat, 11 Oct 2003 00:16:41 GMT</pubDate></item></channel></rss>