<?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[include funktioniert nicht?]]></title><description><![CDATA[<p>hi,<br />
ich bin gard langsam am verzweifeln, ich weiß das es bestimmt wieder nur ein ganz kleiner fehler ist, aber ich finde ihn einfach nicht.<br />
ich hab in meinem projekt unter anderem die dateien<br />
tDirEntry.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H

class tDirEntry
{
	public:
	char *GetName();
	char *GetPath();
	int GetSize();
	int GetDate();
	void SetName(char *NameToSet);
	void SetPath(char *PathToSet);
	void SetSize(int SizeToSet);
	void SetDate(int DateToSet);

	private:
	char *Name, *Path;
	int Size, Date;
};

#endif
</code></pre>
<p>und tDir.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H

#include &lt;tDirEntry.h&gt;

class tDir
{
	public:
	tDir();
	~tDir();
	void ChangeDir(char *Path);
	void Scroll(bool Up);

	private:
	tDirEntry *Entries[4096];
	char *CurrentPath;
};

#endif
</code></pre>
<p>beim compilieren bekomm ich dann aber immer den fehler:</p>
<pre><code>tDir.h:35: error: ISO C++ forbids declaration of ‘tDirEntry’ with no type
tDir.h:35: error: expected ‘;’ before ‘*’ token
tDir.h:35: error: ISO C++ forbids declaration of ‘tDirEntry’ with no type
tDir.h:35: error: expected ‘;’ before ‘*’ token
</code></pre>
<p>(plus natürlich die meldungen das &quot;Entries&quot; fehlt, was hierfür aber irrelevant sein dürfte)</p>
<p>das problem das der compiler hierbei hat ist ja das ihm die klasse &quot;tDirEntry&quot; fehlt. diese ist doch aber eindeutig in &quot;tDirEntry.h&quot; definiert, und der header ist doch auch eingebunden?</p>
<p>wieso erkennt er die klasse nicht?</p>
<p>und das beste: wenn ich einfach statt dem #include... einfach die definition der klasse reinkopiere funktioniert alles wunderbar.</p>
<p>für mich heißt das dann das er aus irgeneinem grund den header nicht einbindet, bloß warum versteh ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193509/include-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 00:45:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193509.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Sep 2007 16:57:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to include funktioniert nicht? on Wed, 26 Sep 2007 16:57:34 GMT]]></title><description><![CDATA[<p>hi,<br />
ich bin gard langsam am verzweifeln, ich weiß das es bestimmt wieder nur ein ganz kleiner fehler ist, aber ich finde ihn einfach nicht.<br />
ich hab in meinem projekt unter anderem die dateien<br />
tDirEntry.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H

class tDirEntry
{
	public:
	char *GetName();
	char *GetPath();
	int GetSize();
	int GetDate();
	void SetName(char *NameToSet);
	void SetPath(char *PathToSet);
	void SetSize(int SizeToSet);
	void SetDate(int DateToSet);

	private:
	char *Name, *Path;
	int Size, Date;
};

#endif
</code></pre>
<p>und tDir.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H

#include &lt;tDirEntry.h&gt;

class tDir
{
	public:
	tDir();
	~tDir();
	void ChangeDir(char *Path);
	void Scroll(bool Up);

	private:
	tDirEntry *Entries[4096];
	char *CurrentPath;
};

#endif
</code></pre>
<p>beim compilieren bekomm ich dann aber immer den fehler:</p>
<pre><code>tDir.h:35: error: ISO C++ forbids declaration of ‘tDirEntry’ with no type
tDir.h:35: error: expected ‘;’ before ‘*’ token
tDir.h:35: error: ISO C++ forbids declaration of ‘tDirEntry’ with no type
tDir.h:35: error: expected ‘;’ before ‘*’ token
</code></pre>
<p>(plus natürlich die meldungen das &quot;Entries&quot; fehlt, was hierfür aber irrelevant sein dürfte)</p>
<p>das problem das der compiler hierbei hat ist ja das ihm die klasse &quot;tDirEntry&quot; fehlt. diese ist doch aber eindeutig in &quot;tDirEntry.h&quot; definiert, und der header ist doch auch eingebunden?</p>
<p>wieso erkennt er die klasse nicht?</p>
<p>und das beste: wenn ich einfach statt dem #include... einfach die definition der klasse reinkopiere funktioniert alles wunderbar.</p>
<p>für mich heißt das dann das er aus irgeneinem grund den header nicht einbindet, bloß warum versteh ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373289</guid><dc:creator><![CDATA[verzweifelter]]></dc:creator><pubDate>Wed, 26 Sep 2007 16:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to include funktioniert nicht? on Wed, 26 Sep 2007 17:20:16 GMT]]></title><description><![CDATA[<p>verzweifelter schrieb:</p>
<blockquote>
<p>hi,<br />
ich bin gard langsam am verzweifeln, ich weiß das es bestimmt wieder nur ein ganz kleiner fehler ist, aber ich finde ihn einfach nicht...</p>
</blockquote>
<p>3 Dinge fallen mir hier auf:</p>
<p>a) Includeguards müssen eindeutig benannt sein.</p>
<p>verzweifelter schrieb:</p>
<blockquote>
<p>hi,<br />
tDirEntry.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H
...
</code></pre>
<p>und tDir.h:</p>
<pre><code class="language-cpp">#ifndef TDIR_H
#define TDIR_H
...
</code></pre>
</blockquote>
<p>Das kann garnicht funktionieren, da der Compiler hier nur (je nach dem mit welcher Datei er beginnt) eine der beiden Klassen finden kann. Ein gerne gemachter Copy/Paste-Fehler...</p>
<p>b) Die eckigen Klammern beim Include sollten in der Regel den Bibliotheksheadern überlassen sein... (#include &lt;tDirEntry.h&gt; =&gt; #include &quot;tDirEntry.h&quot;), der Unterschied ist, wo die Dateien überall gesucht werden.</p>
<p>c) Sofern man es vermeiden kann würde ich ein Include so weit wie möglich herauszögern (Wenn du die Gründe wissen willst kannst du ja man nach pImpl- oder Handle-Body Idiom googeln, dabei wird es gerne auch erwähnt).</p>
<pre><code class="language-cpp">...

class tDirEntry;

class tDir
{
	...
	tDirEntry *Entries[4096];
};
...
</code></pre>
<p>Eine Vorwärtsdeklaration reicht in diesem Fall da bei der Deklaration eines Zeigers oder einer Referenz der konkrete Typ noch nicht bekannt sein muß. Das Include müsstest du in dem Fall in der cpp machen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373304</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to include funktioniert nicht? on Wed, 26 Sep 2007 17:27:25 GMT]]></title><description><![CDATA[<p>ok, vielen dank, ich wusste doch das es wieder nur so eine dumme sache ist. includeguards geändert und alles funktioniert!<br />
und danke auch für die tipps, da werd ich mich nochmal schlau machen.</p>
<p>nochmal vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373307</guid><dc:creator><![CDATA[nichtmehr verzweifeler]]></dc:creator><pubDate>Wed, 26 Sep 2007 17:27:25 GMT</pubDate></item></channel></rss>