<?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 in anderen Headerdateien unbekannt]]></title><description><![CDATA[<p>Ich habe eine Klasse Cube3D geschrieben, die Würfel zeichnen können soll. Problem: Die Klasse ist in allen anderen Header-Files unbekannt auch wenn der Header inkludiert wurde. In allen Sourcefiles kann ich dagegen die Klasse problemlos nutzen und Objekte anlegen.</p>
<p>Klassendefinition:</p>
<pre><code class="language-cpp">#ifndef __CUBE3D_H__
#define __CUBE3D_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;globals.h&quot;

class Cube3D	{

public:
	Cube3D();
	Cube3D(float x, float y, float z, float width, float height, float depth);
	~Cube3D();
	void setSize(float width, float height, float depth);
	void setPosition(float x, float y, float z);
	void render();

private:

	void updateVertices();
	bool createVertexBuffer();

	float fX,fY,fZ;
	float fWidth, fHeight, fDepth;
	LPDIRECT3DVERTEXBUFFER9 pCubeVertexBuffer;

};

#endif // __CUBE3D_H__
</code></pre>
<p>geplante Verwendung (nur als Test):</p>
<pre><code class="language-cpp">#ifndef __D3DMAIN_H__
#define __D3DMAIN_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;cube3d.h&quot;

#define ERR_CREATE_D3DOBJ		-1000;
#define ERR_CREATE_D3DDEVICE	-1001;

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

struct CUSTOMVERTEX	{
	FLOAT x, y, z;
      DWORD colour;
};

class D3DMain	{

public:
	int create3DDevice();
	int cleanUpD3D();

	int drawFrame();

private:
	LPDIRECT3DSURFACE9 surf;
	CUSTOMVERTEX vertices[3];
	LPDIRECT3DVERTEXBUFFER9 pD3DVertexBuffer;

	Cube3D c1;  // Hier entsteht der Fehler

	void setupMatrices();
};

#endif	// __D3DMAIN_H__
</code></pre>
<p>Dazu fällt VisualC++ dann nur ein:</p>
<pre><code>D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2146: syntax error : missing ';' before identifier 'c1'
D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2501: 'Cube3D' : missing storage-class or type specifiers
D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2501: 'c1' : missing storage-class or type specifiers
</code></pre>
<p>Ich arbeite noch nicht sehr lange damit, aber aus der fehlermeldung schliesse ich, dass ihm die Klasse einfach nicht bekannt ist oder ?</p>
<p>Wenn ich versuche die Klasse vorerst zu deklarieren mit</p>
<pre><code>Class Cube3D;
</code></pre>
<p>behauptet er, er würde eine nicht weiter definierte Klasse Cube3D verwenden wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119820/klasse-in-anderen-headerdateien-unbekannt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 02:27:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119820.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Sep 2005 02:03:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 02:05:10 GMT]]></title><description><![CDATA[<p>Ich habe eine Klasse Cube3D geschrieben, die Würfel zeichnen können soll. Problem: Die Klasse ist in allen anderen Header-Files unbekannt auch wenn der Header inkludiert wurde. In allen Sourcefiles kann ich dagegen die Klasse problemlos nutzen und Objekte anlegen.</p>
<p>Klassendefinition:</p>
<pre><code class="language-cpp">#ifndef __CUBE3D_H__
#define __CUBE3D_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;globals.h&quot;

class Cube3D	{

public:
	Cube3D();
	Cube3D(float x, float y, float z, float width, float height, float depth);
	~Cube3D();
	void setSize(float width, float height, float depth);
	void setPosition(float x, float y, float z);
	void render();

private:

	void updateVertices();
	bool createVertexBuffer();

	float fX,fY,fZ;
	float fWidth, fHeight, fDepth;
	LPDIRECT3DVERTEXBUFFER9 pCubeVertexBuffer;

};

#endif // __CUBE3D_H__
</code></pre>
<p>geplante Verwendung (nur als Test):</p>
<pre><code class="language-cpp">#ifndef __D3DMAIN_H__
#define __D3DMAIN_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;cube3d.h&quot;

#define ERR_CREATE_D3DOBJ		-1000;
#define ERR_CREATE_D3DDEVICE	-1001;

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

struct CUSTOMVERTEX	{
	FLOAT x, y, z;
      DWORD colour;
};

class D3DMain	{

public:
	int create3DDevice();
	int cleanUpD3D();

	int drawFrame();

private:
	LPDIRECT3DSURFACE9 surf;
	CUSTOMVERTEX vertices[3];
	LPDIRECT3DVERTEXBUFFER9 pD3DVertexBuffer;

	Cube3D c1;  // Hier entsteht der Fehler

	void setupMatrices();
};

#endif	// __D3DMAIN_H__
</code></pre>
<p>Dazu fällt VisualC++ dann nur ein:</p>
<pre><code>D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2146: syntax error : missing ';' before identifier 'c1'
D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2501: 'Cube3D' : missing storage-class or type specifiers
D:\doc\src\c\directx\dx_versuch1\d3dmain.h(33) : error C2501: 'c1' : missing storage-class or type specifiers
</code></pre>
<p>Ich arbeite noch nicht sehr lange damit, aber aus der fehlermeldung schliesse ich, dass ihm die Klasse einfach nicht bekannt ist oder ?</p>
<p>Wenn ich versuche die Klasse vorerst zu deklarieren mit</p>
<pre><code>Class Cube3D;
</code></pre>
<p>behauptet er, er würde eine nicht weiter definierte Klasse Cube3D verwenden wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865840</guid><dc:creator><![CDATA[muhzilla]]></dc:creator><pubDate>Tue, 06 Sep 2005 02:05:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 03:34:55 GMT]]></title><description><![CDATA[<p>Obskure: Sollte eingentlich den Default-Construstor nehmen. Ein ganz boeser Verdacht, steht im vorhergehenden File etwas, was das Einbinden des Headers veraender koennte (nicht geschlossene Klammer z. B.)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865841</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Tue, 06 Sep 2005 03:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 03:59:21 GMT]]></title><description><![CDATA[<p>Wenn du mit vorherigem File das #include &quot;globals.h&quot; meinst: Ich denke das File ist okay, Klammern gibts da ohnehin nicht drin, sondern nur Variablendeklarationen.</p>
<p>Edit:</p>
<p>Also, jetzt habe ich doch gerade mal ein wenig damit rumgespielt und das #include &quot;globals.h&quot; aus der cube3d.h in die cube3d.cpp gesteckt und jetzt gehts. Jetzt wüsste ich nur noch gerne warum?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/865842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865842</guid><dc:creator><![CDATA[muhzilla]]></dc:creator><pubDate>Tue, 06 Sep 2005 03:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 03:56:55 GMT]]></title><description><![CDATA[<p>Bei dem Define: Das Semikolon ist zuviel - oder ist das so gewollt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865843</guid><dc:creator><![CDATA[gurru]]></dc:creator><pubDate>Tue, 06 Sep 2005 03:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 04:02:23 GMT]]></title><description><![CDATA[<p>okay, ja die sind zuviel, bzw. unnötig, allerdings ändert es auch nix, wenn ich die weglasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865844</guid><dc:creator><![CDATA[muhzilla]]></dc:creator><pubDate>Tue, 06 Sep 2005 04:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 05:20:24 GMT]]></title><description><![CDATA[<p>Wie sieht denn die globals.h aus ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865850</guid><dc:creator><![CDATA[phlox81]]></dc:creator><pubDate>Tue, 06 Sep 2005 05:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 06:23:31 GMT]]></title><description><![CDATA[<p>Der Code sollte soweit in Ordnung sein.</p>
<p>muhzilla schrieb:</p>
<blockquote>
<p>okay, ja die sind zuviel, bzw. unnötig, allerdings ändert es auch nix, wenn ich die weglasse.</p>
</blockquote>
<p>Das mit den Semikolons war auch nur deswegen, wenn du die defines in einem if, ... verwenden willst, dann würden die zu einem Fehler führen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/865861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/865861</guid><dc:creator><![CDATA[gurru]]></dc:creator><pubDate>Tue, 06 Sep 2005 06:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 12:44:52 GMT]]></title><description><![CDATA[<p>muhzilla schrieb:</p>
<blockquote>
<p>Also, jetzt habe ich doch gerade mal ein wenig damit rumgespielt und das #include &quot;globals.h&quot; aus der cube3d.h in die cube3d.cpp gesteckt und jetzt gehts. Jetzt wüsste ich nur noch gerne warum?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Leider ist meine Kristallkugel gerade in Reparatur, aber wenn man den File sehen wuerde, koennte man das vielleicht sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866204</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Tue, 06 Sep 2005 12:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 15:11:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef GLOBALS_H
#define GLOBALS_H

#include &lt;windows.h&gt;
#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;d3dmain.h&quot;

extern HWND g_hMainWnd;						// MainWindow WindowHandle;
extern HINSTANCE  g_hMainInst;				// Main Instance of Application;
extern WNDCLASSEX g_wndClassEx;				// WindowClass used for MainWindow
extern char g_szAppName[16];				// Application Title
extern D3DMain d3dmain;

// DirectGraphics Globals //

extern IDirect3D9 *g_pD3D;
extern IDirect3DDevice9 *g_pd3dDevice;

#endif // GLOBALS_H
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/866362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866362</guid><dc:creator><![CDATA[muhzilla]]></dc:creator><pubDate>Tue, 06 Sep 2005 15:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 20:27:27 GMT]]></title><description><![CDATA[<p>Ich verstehe da etwas nicht: Die &quot;d3dmain.h&quot; ist in &quot;global.h&quot; eingebunden, aber umgekehrt ist die &quot;global.h&quot; in &quot;d3dmain.h&quot; eingebunden. Kann es sein, dass die Hierachie der Header etwas durch einander geraten ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866587</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Tue, 06 Sep 2005 20:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 21:01:10 GMT]]></title><description><![CDATA[<p>muhzilla schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#ifndef __D3DMAIN_H__
#define __D3DMAIN_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;
#include &quot;cube3d.h&quot;

#define ERR_CREATE_D3DOBJ		-1000;
#define ERR_CREATE_D3DDEVICE	-1001;

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

struct CUSTOMVERTEX	{
	FLOAT x, y, z;
      DWORD colour;
};

class D3DMain	{

public:
	int create3DDevice();
	int cleanUpD3D();

	int drawFrame();

private:
	LPDIRECT3DSURFACE9 surf;
	CUSTOMVERTEX vertices[3];
	LPDIRECT3DVERTEXBUFFER9 pD3DVertexBuffer;

	Cube3D c1;  // Hier entsteht der Fehler

	void setupMatrices();
};

#endif	// __D3DMAIN_H__
</code></pre>
</blockquote>
<p>die beste art solche fehler auszuschließen is die verwendung von zeigern/referenzen und vorwärtsdeklarationen</p>
<p>d.h. der header von cube3d wird garnich erst eingebunden</p>
<pre><code class="language-cpp">#ifndef __D3DMAIN_H__
#define __D3DMAIN_H__

#include &lt;d3dx9.h&gt;
#include &lt;d3d9.h&gt;

class Cube3D; // vorwärtsdeklaration

#define ERR_CREATE_D3DOBJ		-1000;
#define ERR_CREATE_D3DDEVICE	-1001;

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

struct CUSTOMVERTEX	{
	FLOAT x, y, z;
      DWORD colour;
};

class D3DMain	{

public:
	int create3DDevice();
	int cleanUpD3D();

	int drawFrame();

private:
	LPDIRECT3DSURFACE9 surf;
	CUSTOMVERTEX vertices[3];
	LPDIRECT3DVERTEXBUFFER9 pD3DVertexBuffer;

	Cube3D* c1;  // Hier entsteht der Fehler

	void setupMatrices();
};

#endif	// __D3DMAIN_H__
</code></pre>
<p>statt den header von cube3d im d3dmain header einzubinden bindest du ihn nur in der cpp ein in der auf den zeiger cl zugegriffen wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866611</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Tue, 06 Sep 2005 21:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse in anderen Headerdateien unbekannt on Tue, 06 Sep 2005 21:48:52 GMT]]></title><description><![CDATA[<p>MBCS-CITP schrieb:</p>
<blockquote>
<p>Ich verstehe da etwas nicht: Die &quot;d3dmain.h&quot; ist in &quot;global.h&quot; eingebunden, aber umgekehrt ist die &quot;global.h&quot; in &quot;d3dmain.h&quot; eingebunden. Kann es sein, dass die Hierachie der Header etwas durch einander geraten ist?</p>
</blockquote>
<p>Das 2 Header sich gegenseitig einbinden ist doch nichts ungewöhnliches, oder? Klasse A kann Klasse B verwenden und Klasse B kann Klasse A verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/866642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/866642</guid><dc:creator><![CDATA[muhzilla]]></dc:creator><pubDate>Tue, 06 Sep 2005 21:48:52 GMT</pubDate></item></channel></rss>