<?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 mit Inkludiersystem]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem mit dem Inkludiersystem in meinem Projekt. Es wäre toll, wenn mir jemand erkären könnte, wie es mit beibehaltenem include zu lösen ist.</p>
<p>Ich habe fünf Dateien:<br />
main.cpp</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &quot;CMyWindow.h&quot;

int main(int argc, char *argv[]) {
	MSG msg;
	int nMessageLoopReturnValue;

	CMyWindow MyWindow;

	MyWindow.create();

	// Message loop
	while( (nMessageLoopReturnValue = GetMessage(&amp;msg, NULL, 0, 0)) != 0 ) {
		if (nMessageLoopReturnValue == -1) {
			// Error
		} else {
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
		}
	}

	return (int)msg.wParam;
}
</code></pre>
<p>CMyWindow.h</p>
<pre><code>#ifndef _CMYWINDOW_H
#define _CMYWINDOW_H

#include &quot;CDataHandler.h&quot;

class CMyWindow {
	public:
		void create();
	private:
		// DIESE ZEILE GEHT NICHT, ER WILL HIER EIN &quot;;&quot; HABEN
		//                                   |
		//          +------------------------+
		//          |
		CDataHandler m_DataHandler;
};

#endif // #ifndef _CMYWINDOW_H
</code></pre>
<p>CMyWindow.cpp</p>
<pre><code>#include &quot;CMyWindow.h&quot;

void CMyWindow::create() {
	// Funktioniert
	CDataHandler DataHandler;

	DataHandler.foo();

	return;
}
</code></pre>
<p>CDataHandler.h, durch Auskommentieren des includes kann ich den Fehler ausschalten, aber es soll da bleiben</p>
<pre><code>#ifndef _CDATAHANDLER_H
#define _CDATAHANDLER_H

#include &quot;CMyWindow.h&quot;

class CDataHandler {
	public:
		void foo();
};

#endif // #ifndef _CDATAHANDLER_H
</code></pre>
<p>CDataHandler.cpp</p>
<pre><code>#include &quot;CDataHandler.h&quot;

void CDataHandler::foo() {
	return;
}
</code></pre>
<p>Der Compiler (VC++ 2005 Express Edition) liefert mit folgende Ausgabe:</p>
<pre><code>Kompilieren...
CDataHandler.cpp
c:\temporär\sdlkgifog\cmywindow.h(10) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_DataHandler'
c:\temporär\sdlkgifog\cmywindow.h(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
c:\temporär\sdlkgifog\cmywindow.h(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
Code wird generiert...
Kompilieren...
CMyWindow.cpp
Code wird generiert...
Kompilieren...
main.cpp
Code wird generiert...
Minigolf - 3 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/170899/problem-mit-inkludiersystem</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 09:55:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170899.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Jan 2007 18:00:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sat, 20 Jan 2007 18:00:25 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem mit dem Inkludiersystem in meinem Projekt. Es wäre toll, wenn mir jemand erkären könnte, wie es mit beibehaltenem include zu lösen ist.</p>
<p>Ich habe fünf Dateien:<br />
main.cpp</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &quot;CMyWindow.h&quot;

int main(int argc, char *argv[]) {
	MSG msg;
	int nMessageLoopReturnValue;

	CMyWindow MyWindow;

	MyWindow.create();

	// Message loop
	while( (nMessageLoopReturnValue = GetMessage(&amp;msg, NULL, 0, 0)) != 0 ) {
		if (nMessageLoopReturnValue == -1) {
			// Error
		} else {
			TranslateMessage(&amp;msg);
			DispatchMessage(&amp;msg);
		}
	}

	return (int)msg.wParam;
}
</code></pre>
<p>CMyWindow.h</p>
<pre><code>#ifndef _CMYWINDOW_H
#define _CMYWINDOW_H

#include &quot;CDataHandler.h&quot;

class CMyWindow {
	public:
		void create();
	private:
		// DIESE ZEILE GEHT NICHT, ER WILL HIER EIN &quot;;&quot; HABEN
		//                                   |
		//          +------------------------+
		//          |
		CDataHandler m_DataHandler;
};

#endif // #ifndef _CMYWINDOW_H
</code></pre>
<p>CMyWindow.cpp</p>
<pre><code>#include &quot;CMyWindow.h&quot;

void CMyWindow::create() {
	// Funktioniert
	CDataHandler DataHandler;

	DataHandler.foo();

	return;
}
</code></pre>
<p>CDataHandler.h, durch Auskommentieren des includes kann ich den Fehler ausschalten, aber es soll da bleiben</p>
<pre><code>#ifndef _CDATAHANDLER_H
#define _CDATAHANDLER_H

#include &quot;CMyWindow.h&quot;

class CDataHandler {
	public:
		void foo();
};

#endif // #ifndef _CDATAHANDLER_H
</code></pre>
<p>CDataHandler.cpp</p>
<pre><code>#include &quot;CDataHandler.h&quot;

void CDataHandler::foo() {
	return;
}
</code></pre>
<p>Der Compiler (VC++ 2005 Express Edition) liefert mit folgende Ausgabe:</p>
<pre><code>Kompilieren...
CDataHandler.cpp
c:\temporär\sdlkgifog\cmywindow.h(10) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_DataHandler'
c:\temporär\sdlkgifog\cmywindow.h(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
c:\temporär\sdlkgifog\cmywindow.h(10) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
Code wird generiert...
Kompilieren...
CMyWindow.cpp
Code wird generiert...
Kompilieren...
main.cpp
Code wird generiert...
Minigolf - 3 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1213329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213329</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Sat, 20 Jan 2007 18:00:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sat, 20 Jan 2007 18:13:37 GMT]]></title><description><![CDATA[<p>intidscha schrieb:</p>
<blockquote>
<p>CDataHandler.h, durch Auskommentieren des includes kann ich den Fehler ausschalten, aber es soll da bleiben</p>
</blockquote>
<p>Genau diese Includedirektive ist aber das Problem. Es ist auch die einzige, die überflüssig ist. Warum soll die Direktive dort bleiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213333</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sat, 20 Jan 2007 18:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sat, 20 Jan 2007 18:26:54 GMT]]></title><description><![CDATA[<p>Ich wollte es alles auf einer Ebene haben. Also muss man beim Programmieren so vorgehen, dass man abstuft? &quot;Die Klasse ist unter der&quot; usw.? (D.h., die eine kann die andere niemals beinhalten?)</p>
<p>Wieso funktioniert es denn nicht? Wenn er das zweite mal includen will, ist doch der eine Wert da definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213339</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Sat, 20 Jan 2007 18:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sat, 20 Jan 2007 18:36:34 GMT]]></title><description><![CDATA[<p>Das hat mit Ebenen nichts zu tun. Includedirektiven fügt man dort ein, wo sie <em>notwendig</em> sind. CMyWindow hat einen Member vom Typ CDataHandler, also <strong>muss</strong> die Definition von CDataHandler vor der Definition von CMyWindow liegen.</p>
<blockquote>
<p>Wieso funktioniert es denn nicht? Wenn er das zweite mal includen will, ist doch der eine Wert da definiert.</p>
</blockquote>
<p>Kein Header wird zweimal in dieselbe Übersetzungseinheit eingebunden, dafür sorgen die Include-Guards. Du erzwingst durch die Includedirektive in CDataHandler.h, dass CMyWindow.h immer &quot;davor&quot; liegt. Und das führt zu dem oben beschriebenen Problem.</p>
<p>Wenn du die Includedirektive unbedingt in dieser Datei haben willst, dann schieb sie nach hinten.</p>
<p>Aber wie gesagt, sinnvoll ist das nicht. Überflüssige Includedirektiven erzeugen nur unnötige Compilezeitabhängigkeiten im Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213342</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sat, 20 Jan 2007 18:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sun, 21 Jan 2007 16:49:11 GMT]]></title><description><![CDATA[<p>Was ist nun, wenn ich von CDataHandler aus eine Methode namens raiseError() von CMyWindow aufrufen will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213862</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Sun, 21 Jan 2007 16:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sun, 21 Jan 2007 17:07:50 GMT]]></title><description><![CDATA[<p>includierst du MyWindow.h in DataHandler.cpp (UNTER #include &quot;DataHandler.h&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213879</guid><dc:creator><![CDATA[gloebl]]></dc:creator><pubDate>Sun, 21 Jan 2007 17:07:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sun, 21 Jan 2007 17:16:38 GMT]]></title><description><![CDATA[<p>Aber ich muss doch in der Definition der Klasse CDataHandler in &quot;CDataHandler.h&quot; ein Objekt erzeugen: &quot;CMyWindow m_MyWindow;&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213884</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Sun, 21 Jan 2007 17:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sun, 21 Jan 2007 18:12:30 GMT]]></title><description><![CDATA[<p>intidscha schrieb:</p>
<blockquote>
<p>Aber ich muss doch in der Definition der Klasse CDataHandler in &quot;CDataHandler.h&quot; ein Objekt erzeugen: &quot;CMyWindow m_MyWindow;&quot;.</p>
</blockquote>
<p>Du meinst, ein CMyWindow enthält ein CDataHandler, und ein CDataHandler enthält ein CMyWindow? Wie soll das funktionieren? CDataHandler enthält CMyWindow enthält CDataHandler enthält CMyWindow enthält CDataHandler enthält CMyWindow usw.</p>
<p>Das terminiert nicht.</p>
<p>Du solltest vielleicht nochmal dein Design überarbeiten, und genau klären, welche Objekte welche anderen Objekte besitzen, und welche möglicherweise nur Verweise (Referenzen) auf andere Objekte haben.</p>
<p>Ich habe den Eindruck, dass du Member nur deswegen anlegst, damit du deren Methoden aufrufen kannst. Das ist aber nicht der Sinn von Membern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213926</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 21 Jan 2007 18:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Sun, 21 Jan 2007 22:28:28 GMT]]></title><description><![CDATA[<p>Okay, das klingt natürlich einleuchtend. Aber es ist mir ein Rätsel, wie ich dann Methoden des parents aufrufen können soll (Beispiel raiseError()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214089</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Sun, 21 Jan 2007 22:28:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Mon, 22 Jan 2007 05:09:47 GMT]]></title><description><![CDATA[<p>intidscha schrieb:</p>
<blockquote>
<p>Aber es ist mir ein Rätsel, wie ich dann Methoden des parents aufrufen können soll (Beispiel raiseError()).</p>
</blockquote>
<p>Zum Beispiel indem du dem abhängigen Objekt bei der Erzeugung eine Referenz auf seinen &quot;Parent&quot; mitgibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214163</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 22 Jan 2007 05:09:47 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Mon, 22 Jan 2007 09:23:40 GMT]]></title><description><![CDATA[<p>Aber dann muss ich dieses Parent doch wieder als nen Pointer auf ein CMyWindow-Objekt speichern. Oder welchen Typ soll ich dann verwenden, damit ich dann auch die Methode aufrufen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214263</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Mon, 22 Jan 2007 09:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Mon, 22 Jan 2007 09:26:39 GMT]]></title><description><![CDATA[<p>intidscha schrieb:</p>
<blockquote>
<p>Aber dann muss ich dieses Parent doch wieder als nen Pointer auf ein CMyWindow-Objekt speichern.</p>
</blockquote>
<p>Besser als Referenz. Das ist auch kein Problem, denn für Referenz- oder Zeigermember brauchst du keine vollständige Klassendefinition, also auch keine Includedirektive. Da reicht eine Forward Declaration.</p>
<p>Erst wenn du die Klasse benutzt, brauchst du die Definition, d.h. eine Includedirektive in der .cpp-Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214267</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 22 Jan 2007 09:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Mon, 22 Jan 2007 09:28:44 GMT]]></title><description><![CDATA[<p>CMyWindow* dürfte schon der richtige Typ sein - und um dort wechselseitige Abhängigkeiten zu vermeiden, gibt es Forward-Deklarationen:</p>
<pre><code class="language-cpp">//DataHandler.h

class CMyWindow;//Deklaration

class CDataHandler
{
  ...
private:
  CMyWindow* parent;
  ...
};

//DataHandler.cpp
#include &quot;DataHandler.h&quot;
#include &quot;MyWindow.h&quot;

void CDataHandler::doSomething()
{
  parent-&gt;do_this();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1214269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214269</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 22 Jan 2007 09:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Inkludiersystem on Thu, 25 Jan 2007 10:57:55 GMT]]></title><description><![CDATA[<p>Vielen Dank, das klappt super. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216751</guid><dc:creator><![CDATA[intidscha]]></dc:creator><pubDate>Thu, 25 Jan 2007 10:57:55 GMT</pubDate></item></channel></rss>