<?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[ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type]]></title><description><![CDATA[<p>Ich hab den in der überschrift geannten Fehler und ich hab keine Ahnung woher der kommt. Ich hab das ganze schon mehrfach durchgelese ich komm aber nicht drauf. Terminel ist eine Klasse von der ich ein Objekt anlegen will. Ich bin hier neu deshalb weiß ich noch nicht wie ich euch den Quelltext am besten zeigen soll.</p>
<pre><code class="language-cpp">#if !defined(_TERMINAL_H)
#define _TERMINAL_H

//#include &quot;Schranke.hpp&quot;
//#include &quot;Anzeige.hpp&quot;
#include &quot;Platz.hpp&quot;
#include &quot;Karte.hpp&quot;
#include &quot;Student.hpp&quot;
#include &quot;WinGrafik.hpp&quot;
#include &quot;Einfahrttest.hpp&quot;

class Terminal
{
private:
	int MatrNr;
	//Anzeige *freiPlatz;
	Platz *pzaehlen;
	Karte *KarteObj;
	Student *StudentObj;
	Einfahrttest *freiPlatz,*guelt;
    WinGrafik* gk;

public:
	Terminal(WinGrafik* gk);
	void ueberpruefenPlatz();
	void empfangenMatNr(int MatrNr);
	void empfangenPlatz(int n);
	//Schranke *oeffnen;
};

#endif  //_TERMINAL_H
</code></pre>
<p>seht ihr da schon einen Fehler? Wenn nicht sagt mir was ich noch braucht.<br />
Ich hoff ihr könnt mir helfen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191591/iso-c-forbids-declaration-of-terminal-with-no-type</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 03:00:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191591.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Sep 2007 16:44:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Tue, 04 Sep 2007 16:44:49 GMT]]></title><description><![CDATA[<p>Ich hab den in der überschrift geannten Fehler und ich hab keine Ahnung woher der kommt. Ich hab das ganze schon mehrfach durchgelese ich komm aber nicht drauf. Terminel ist eine Klasse von der ich ein Objekt anlegen will. Ich bin hier neu deshalb weiß ich noch nicht wie ich euch den Quelltext am besten zeigen soll.</p>
<pre><code class="language-cpp">#if !defined(_TERMINAL_H)
#define _TERMINAL_H

//#include &quot;Schranke.hpp&quot;
//#include &quot;Anzeige.hpp&quot;
#include &quot;Platz.hpp&quot;
#include &quot;Karte.hpp&quot;
#include &quot;Student.hpp&quot;
#include &quot;WinGrafik.hpp&quot;
#include &quot;Einfahrttest.hpp&quot;

class Terminal
{
private:
	int MatrNr;
	//Anzeige *freiPlatz;
	Platz *pzaehlen;
	Karte *KarteObj;
	Student *StudentObj;
	Einfahrttest *freiPlatz,*guelt;
    WinGrafik* gk;

public:
	Terminal(WinGrafik* gk);
	void ueberpruefenPlatz();
	void empfangenMatNr(int MatrNr);
	void empfangenPlatz(int n);
	//Schranke *oeffnen;
};

#endif  //_TERMINAL_H
</code></pre>
<p>seht ihr da schon einen Fehler? Wenn nicht sagt mir was ich noch braucht.<br />
Ich hoff ihr könnt mir helfen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358942</guid><dc:creator><![CDATA[_c0mpiler]]></dc:creator><pubDate>Tue, 04 Sep 2007 16:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Tue, 04 Sep 2007 16:51:07 GMT]]></title><description><![CDATA[<p>Binden irgendwelche der inkludierten Header den gezeigten Header ein? In welcher Zeile tritt der Fehler auf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358945</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 04 Sep 2007 16:51:07 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Tue, 04 Sep 2007 17:31:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#if !defined(_TERMINAL_H)
</code></pre>
<p>soll das nicht eher</p>
<pre><code class="language-cpp">#ifndef _TERMINAL_H
</code></pre>
<p>sein?</p>
<p>sind die anderen includierten header ok? bei jeder klasse ein }; vorhanden? vergisst man gerne und man bekommt die merkwürdigsten fehler..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358967</guid><dc:creator><![CDATA[ConfusedGuy]]></dc:creator><pubDate>Tue, 04 Sep 2007 17:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Tue, 04 Sep 2007 17:53:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#if !defined(TERMINAL_H__INCLUDED)
#define TERMINAL_H__INCLUDED

#if (_MSC_VER &gt;= 1300)
#pragma once
#endif // (_MSC_VER &gt;= 1300)

class Terminal
{
	// ... 
};

#endif // TERMINAL_H__INCLUDED
</code></pre>
<p>ist vollkommen i.o. nur _### nicht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1358979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1358979</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 04 Sep 2007 17:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Wed, 05 Sep 2007 14:39:24 GMT]]></title><description><![CDATA[<p>Danke für eure schnelle antwort!<br />
Ich hab gestern in der Fehlerbeschreibung einen Fehler gemacht. Ich will nicht ein Objekt sondern ein Zeiger von Terminal anlegen und das in einer anderen Klasse als privates Element.<br />
Der Fehler tritt in Zeile auf in der, der Zeiger deklariert wird und ja die Header binden Teils auch diesen ein. Das sollt aber aufgrund</p>
<pre><code class="language-cpp">#if !defined(_TERMINAL_H)
#define _TERMINAL_H
</code></pre>
<p>kein Problem sein. Oder?<br />
(D)Evil wie meinst du das mit &quot;_###&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359502</guid><dc:creator><![CDATA[_c0mpiler]]></dc:creator><pubDate>Wed, 05 Sep 2007 14:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Wed, 05 Sep 2007 14:51:33 GMT]]></title><description><![CDATA[<p>_c0mpiler schrieb:</p>
<blockquote>
<p>und ja die Header binden Teils auch diesen ein.</p>
</blockquote>
<p>Dann ist das dein Problem. Zirkuläre Abhängigkeiten von Definitionen sind in C++ nicht darstellbar. Und auch der Inludeguard hilft da nicht, und das ist auch nicht der Zweck desselben. [Anm. (D)Evil: ein bisschen mißglückt ist das schon: einerseits auf standardkonformer Reservierung von Bezeichnern bestehen - wobei klar ist, dass das hier nicht die Ursache des Problems ist - andererseits #pragmas einführen, die definitionsgemäß plattformabhängiges Verhalten haben].</p>
<p>Grundsätzlich muss es eine klare Hierarchie von Headern geben, ein Header1 der einen Header2 einbindet, darf nicht (direkt oder indirekt) von Header2 selbst wieder eingebunden werden [Ausnahmen bestätigen die Regel und sind zu speziell, um hier diskutiert zu werden].</p>
<p>Kleines Beispiel:<br />
header1</p>
<pre><code class="language-cpp">#ifndef HEADER1
#define HEADER1
#include &quot;header2&quot;
class X
{
    Y* p;
};
#endif
</code></pre>
<p>header2</p>
<pre><code class="language-cpp">#ifndef HEADER2
#define HEADER2
#include &quot;header1&quot;
class Y
{
    X* q;
};
#endif
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;header1&quot;
</code></pre>
<p>Was passiert hier:<br />
1. main.cpp bindet header1 ein<br />
2. der Präprozessor trifft auf die ifndef Direktive, da das Symbol HEADER1 noch nicht definiert ist, wird der folgende Teil des Headers eingebunden<br />
3. Das Symbol HEADER1 wird definiert<br />
4. der Präprozessor trifft auf das #include &quot;header2&quot; und macht mit dieser Datei weiter<br />
5. der Präprozessor trifft auf die ifndef Direktive, da das Symbol HEADER2 noch nicht definiert ist, wird der folgende Teil des Headers eingebunden<br />
6. Das Symbol HEADER2 wird definiert<br />
7. der Präprozessor trifft auf das #include &quot;header1&quot; und macht mit dieser Datei weiter<br />
8. der Präprozessor trifft auf die ifndef Direktive, da das Symbol HEADER1 bereits definiert ist, wird der folgende Teil des Headers nicht eingebunden, folglich auch die Definition von Class X übersprungen<br />
9. der Präprozessor kehrt zur Bearbeitung von Header2 zurück (7) und bindet diesen ein, darin enthalten ist die Definition von Y<br />
10.der Präprozessor kehrt zur Bearbeitung von Header1 zurück (4) und bindet diesen ein, darin enthalten ist die Definition von X</p>
<p>so sieht das ergebnis des Präprozessordurchlaufs aus:</p>
<pre><code class="language-cpp">class Y
{
    X* q;
};
class X
{
    Y* p;
};
</code></pre>
<p>Und es ist ganz klar, dass der Compiler sich hier in der Definition von Y über einen unbekannten Bezeichner &quot;X&quot; beschweren wird. In diesem speziellen Fall wollen wir aber nur einen Zeiger deklarieren. Ein Zeiger ist auch dann ein vollständiger Typ, wenn der Typ, auf den gezeigt wird, es nicht ist. Wir benötigen daher nur eine Deklaration von X, nicht die Definition des selben (und eine solche Deklaration nennt man für gewöhnlich Vorwärtsdeklaration):</p>
<pre><code class="language-cpp">class X;
</code></pre>
<p>genügt, um die Klasse Y definieren zu können. So sollte unser sinnfreies Beispiel also aussehen:header1</p>
<pre><code class="language-cpp">#ifndef HEADER1
#define HEADER1
class Y;
class X
{
    Y* p;
};
#endif
</code></pre>
<p>header2</p>
<pre><code class="language-cpp">#ifndef HEADER2
#define HEADER2
class X;
class Y
{
    X* q;
};
#endif
</code></pre>
<p>unser main.cpp müsste dann natürlich beide Header explizit einbinden, um beide Definitionen nutzen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359515</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Sep 2007 14:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Wed, 05 Sep 2007 14:44:44 GMT]]></title><description><![CDATA[<p>Ok danke für die Antwort. Die anderen Fehler bzw. die Warnungen die auftreten weißen auf das Problem bereits hin. Mir war wie gesagt nur nicht kalr, dass der Includeguard dabei nichts bringt. ich versuch dann mal ne Struktur rein zu bringen. Das Problem ist, dass das eigenlich icht programmier hab ein Freund der nicht weiter weiß.<br />
Über weitere Ratschläge freu ich weiterhin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359520</guid><dc:creator><![CDATA[_c0mpiler]]></dc:creator><pubDate>Wed, 05 Sep 2007 14:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids declaration of &#x27;Terminal&#x27; with no type on Wed, 05 Sep 2007 14:52:03 GMT]]></title><description><![CDATA[<p>siehe edit oben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1359525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1359525</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Sep 2007 14:52:03 GMT</pubDate></item></channel></rss>