<?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[Verwaltung von vielen Header-Dateien]]></title><description><![CDATA[<p>Ich hab da ein kleines Problem, eher wohl ein falsches Verständnis mit dem Umgang von Headerdateien in C++. Vielleicht könnt ihr mir ja aushelfen...</p>
<p>Angenommen ich habe ein größeres Projekt. Dieses besteht aus vielen einzelnen Quellcodedateien. Einmal &quot;.cpp&quot; und einmal die dazugehörigen &quot;.hpp&quot; Dateien. Die Funktionen, Methoden, Templetes, Klassen, etc sind ja oft abhängig von anderen stellen, also von Definitionen die in ganz anderen Dateien liegen. Deswegen &quot;include&quot; ich die entsprechenden Headerdateien.<br />
Sollte ich jedoch 2mal die gleiche Datei einbinden, so kommt es zu einem Fehler ( &quot;multiple definition&quot; ). Das ist mir irgendwie ja noch relativ verständlich. Also gibt es da diese schönen Tricks mit Präprozessormakros die doppeltes includen verhindern. Tolle Sache. Aber nun kommt mein Problem:<br />
Die Headerdateien werden ja nun nur einmal eingebunden. Aber einige Dinge braucht man doch dennoch mehrmals. Aber ein weiteres Include bringt ja nichts... das heißt es kommt zu Fehlern wie:<br />
- &quot; forbids declaration of 'Button' with no type &quot;<br />
- oder ... &quot; does not name a type &quot;</p>
<p>Ist ja auch klar. Woher soll der davon auch was wissen? Also von den Funktionen, Klassen,... ich hab ihm ja &quot;verboten&quot; die entsprechenden Informationen nochmal zu holen.<br />
Was versteh ich jetzt an dem Prinzip nicht? Was mach ich falsch? Oder macht man so was doch ganz anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212742/verwaltung-von-vielen-header-dateien</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 15:58:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212742.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 May 2008 20:41:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Fri, 09 May 2008 20:41:09 GMT]]></title><description><![CDATA[<p>Ich hab da ein kleines Problem, eher wohl ein falsches Verständnis mit dem Umgang von Headerdateien in C++. Vielleicht könnt ihr mir ja aushelfen...</p>
<p>Angenommen ich habe ein größeres Projekt. Dieses besteht aus vielen einzelnen Quellcodedateien. Einmal &quot;.cpp&quot; und einmal die dazugehörigen &quot;.hpp&quot; Dateien. Die Funktionen, Methoden, Templetes, Klassen, etc sind ja oft abhängig von anderen stellen, also von Definitionen die in ganz anderen Dateien liegen. Deswegen &quot;include&quot; ich die entsprechenden Headerdateien.<br />
Sollte ich jedoch 2mal die gleiche Datei einbinden, so kommt es zu einem Fehler ( &quot;multiple definition&quot; ). Das ist mir irgendwie ja noch relativ verständlich. Also gibt es da diese schönen Tricks mit Präprozessormakros die doppeltes includen verhindern. Tolle Sache. Aber nun kommt mein Problem:<br />
Die Headerdateien werden ja nun nur einmal eingebunden. Aber einige Dinge braucht man doch dennoch mehrmals. Aber ein weiteres Include bringt ja nichts... das heißt es kommt zu Fehlern wie:<br />
- &quot; forbids declaration of 'Button' with no type &quot;<br />
- oder ... &quot; does not name a type &quot;</p>
<p>Ist ja auch klar. Woher soll der davon auch was wissen? Also von den Funktionen, Klassen,... ich hab ihm ja &quot;verboten&quot; die entsprechenden Informationen nochmal zu holen.<br />
Was versteh ich jetzt an dem Prinzip nicht? Was mach ich falsch? Oder macht man so was doch ganz anders?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506313</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Fri, 09 May 2008 20:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Fri, 09 May 2008 20:57:40 GMT]]></title><description><![CDATA[<p>Stop stop, wenn du cpp's vom Compiler übersetzen lässt, werden für diese Objektdateien erstellt. Und nur während dieser Phase sind die #defines &quot;gültig&quot;.</p>
<p>Du hast mit Sicherheit ein anderes Problem:</p>
<p>Klasse1.h:<br />
#include &quot;Klasse2.h&quot;</p>
<p>Klasse2.h:<br />
#include &quot;Klasse1.h&quot;</p>
<p>Wenn jetzt die Klasse1.cpp übersetzt wird, wird natürlich Klasse1.h includiert. Nach dessen #define wird die Klasse2.h includiert. Dort wird auch das #define erledigt. Aber wenn jetzt wieder Klasse1.h includiert werden soll, passiert nichts.</p>
<p>Dadurch erhälst du einen Fehler in Klasse2.h das irgendwelche Typen nicht definiert sind.</p>
<p>Ist hoffentlich verständlich, kann man sicherlich schöner beschreiben ^^</p>
<p>Diese gegenseiten includes sind meistens auf schlechtes Design zurückzuführen. Oft aber auch durch Vorwärtsdeklarationen zu beheben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506322</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Fri, 09 May 2008 20:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 00:31:22 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber einige Dinge braucht man doch dennoch mehrmals.</p>
</blockquote>
<p>Beispiel bitte.<br />
Wenn du Dinge in Header-Files stehen hast die (innerhalb eines Source-Files) mehrfach gebraucht werden, dann ist DAS schon das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506359</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 10 May 2008 00:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 02:20:16 GMT]]></title><description><![CDATA[<p>Makros aus einem Header die in mehreren Header(nicht Source)-Dateien verwendet werden sollen, wobei diese Header, die das Marko benutzen alle in der selben Source-Datei eingebunden werden?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506363</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 10 May 2008 02:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 10:42:36 GMT]]></title><description><![CDATA[<p>Vielleicht hab ich mich ja auch nicht richtig ausgedrückt. Den ich verstehs immer noch nicht.<br />
Also angenommen ich habe hier eine Klasse &quot;Window&quot;. Diese besitzt als ein Element einen Pointer auf die Klasse &quot;Button&quot; (also Anker zu einer Liste von Buttons). Die Klasse &quot;Button&quot; wiederum besitzt aber auch als ein Element ein Pointer auf die Klasse &quot;Window&quot; (er soll wissen auf welchem Fenster er liegt).<br />
Beide Klassen sind in unterschiedlichen Dateien definiert ( window.h und button.h ).</p>
<p>Wie müsste ich diese jetzt includen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506462</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Sat, 10 May 2008 10:42:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 10:49:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// HEADER
class Button
{
private:
class Window *win;
// ...
};
// &lt;-- CPP --&gt;
#include &quot;Window.h&quot;
</code></pre>
<pre><code class="language-cpp">// HEADER
class Window
{
private:
class Button *btn;
}

// &lt;-- CPP --&gt;
#include &quot;Button.h&quot;
</code></pre>
<p>Diese Gegenseitige Abhängigkeit ist aber extrem schlecht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506463</guid><dc:creator><![CDATA[Blabbbbb]]></dc:creator><pubDate>Sat, 10 May 2008 10:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 11:05:32 GMT]]></title><description><![CDATA[<p>@Blabbbbb: Danke, so funktioniert es. Aber warum ist sowas extrem schlecht? Und welche Alternativen hab ich den?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506468</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Sat, 10 May 2008 11:05:32 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 15:05:54 GMT]]></title><description><![CDATA[<p>JDieskau schrieb:</p>
<blockquote>
<p>@Blabbbbb: Danke, so funktioniert es. Aber warum ist sowas extrem schlecht? Und welche Alternativen hab ich den?</p>
</blockquote>
<p>Design Problem. Window muss über Buttons bescheid wissen und muss die verwalten. Klar.<br />
Aber wozu muss ein Button wissen, was Window ist oder gar einen Zeiger darauf halten?! Grob gesagt. Wenn du einen Button hast, könnte der doch auch ohne ein Window drum herum existieren. Jedoch ein Window, dass Buttons hat, muss die selber verwalten, oder was damit machen.</p>
<p>Alternative. Design überdenken. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1506580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506580</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 10 May 2008 15:05:54 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 15:14:41 GMT]]></title><description><![CDATA[<p>So mit dem &quot;designen&quot; hab ich es noch nicht so wirklich. Wie gesagt, Anfänger...<br />
Zum Beispiel die Position von einem Button ist als x,y-Koordinate gespeichert, aber nicht die Bildschirmkoordinaten, sondern 0,0 wäre dann oben links vom entsprechendem Fenster auf dem der Button liegt. Somit wenn der Button &quot;sich zeichnen soll&quot; muss er aber doch wissen wo er auf den Bildschirmkoordinaten liegt. Und dazu braucht er die Angaben von dem Fenster auf dem es liegt.</p>
<p>Eine bessere Lösung würde mir da jetzt nicht einfallen. Wie würde man das sonst machen? Der Klasse &quot;Window&quot; das zeichnen der Buttons überlassen? So richtig blick ich das mit dem designen von Projekten wirklich noch nicht. Gibt es für so was vielleicht gute Anleitungen? Also wie man Projekte richtig plant bevor man losschreibt? Oder Buchempfehlungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506592</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Sat, 10 May 2008 15:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 15:19:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Somit wenn der Button &quot;sich zeichnen soll&quot; muss er aber doch wissen wo er auf den Bildschirmkoordinaten liegt.</p>
</blockquote>
<p>Jo, muss er wohl, aber er sollte sich das nicht (irgendwie) selbst holen, sondern bei dem Funktionsaufruf &quot;zeichnen&quot; das einfach als parameter übergeben bekommen, bzw schon im konstruktor.<br />
Falls du die werte noch weiterhin brauchst kannst du es einfach intern speichern, aber eben nur diese 2 werte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506596</guid><dc:creator><![CDATA[Blubb]]></dc:creator><pubDate>Sat, 10 May 2008 15:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 15:37:05 GMT]]></title><description><![CDATA[<p>Es sind einige mehr Variablen die ich da übergeben müsste und auch einiges andere was ich so umschreiben muss. Was genau ist den an dieser gegenseitigen Abhängigkeit so fatal? Was kann mir da im schlimmsten Fall passieren? Welche Auswirkungen hat das? Was würde es ändern wenn die Button-Klasse sich das nicht holt, sondern alles per Werte übergeben bekommt (außer das es meiner Meinung nach unübersichtlicher werden würde)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506606</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Sat, 10 May 2008 15:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 15:45:22 GMT]]></title><description><![CDATA[<p>JDieskau schrieb:</p>
<blockquote>
<p>Es sind einige mehr Variablen die ich da übergeben müsste und auch einiges andere was ich so umschreiben muss. Was genau ist den an dieser gegenseitigen Abhängigkeit so fatal? Was kann mir da im schlimmsten Fall passieren? Welche Auswirkungen hat das? Was würde es ändern wenn die Button-Klasse sich das nicht holt, sondern alles per Werte übergeben bekommt (außer das es meiner Meinung nach unübersichtlicher werden würde)...</p>
</blockquote>
<p>Hmm. So Generell würde ich sagen, dass dir diese Abhängigkeiten bei einem grösseren Projekt ziemlich schnell das Leben schwer machen. Per Übergabe ist auf eine gewisse Art schöner, da dir dann bewusst ist, dass du da Daten übergibst. Wenn ein Button jetzt auf ein Window zugreifen kann, dann kann der doch auch Funktionen davon aufrufen und das ist nicht &quot;logisch&quot;. Warum sollt ein Button das Recht haben sein Window, wo er drin liegt zu bewegen oder zu resizen?!</p>
<p>Ich würde mal sagen, dass design immer wichtiger wird, je grösser das Projekt ist/wird. Aber du kannst es ruhig mal so machen. Früher oder später wirst du merken, was ich meine. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1506611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506611</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 10 May 2008 15:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 17:15:57 GMT]]></title><description><![CDATA[<p>Wenn du mehrere Daten übergeben musst, kannst auch einfach folgendes machen:</p>
<pre><code class="language-cpp">struct meineButtonDaten {
int positionX;
int positionY;
std::string name;
....
}
//in button
void button::Zeichnen(const &amp;meineButtonDaten daten)
{
...
}
</code></pre>
<p>So gegenseitige Abhängigkeiten führen zu einem sehr starren code - spätere Änderungen sind teilweise gar nicht mehr möglich, man kann eigentlich alles gleich neu schreiben. Solche Änderungen passieren wohl sicher öfter, spätestens beim dritten mal würdest du auch von alleine draufkommen das solche Abhängigkeiten keine gute idee sind <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1506664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506664</guid><dc:creator><![CDATA[Blubb]]></dc:creator><pubDate>Sat, 10 May 2008 17:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verwaltung von vielen Header-Dateien on Sat, 10 May 2008 19:14:27 GMT]]></title><description><![CDATA[<p>Gut, die Daten per struct zusammen zufassen würde es dann wieder schön übersichtlich machen. So gefällt mir das. Mir ist so wieso gerade aufgefallen das es gar nicht mal soo gut ist, einen Pointer in der Buttonklasse zu haben, dieser ist ja dann in jedem Button enthalten. Eigentlich würde es bei einer Liste ja einmal reichen.</p>
<p>Und das Argument mit dem starren Code akzeptiere ich jetzt mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Hab ja noch nicht so viel Erfahrung. Und irgendwann mal in diese &quot;Falle&quot; rein zulaufen möcht ich nun auch nicht... so kann ich den Code dafür auch gleich mal richtig umschreiben. Am besten gleich mit Vererbung, dann kann ich mir das auch mal richtig genauer zu gemüte ziehen (ich meiner jetzt nicht Button soll von Window geerbt werden, sondern eher so mehrere Schaltflächen)</p>
<p>Danke also erstmal für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1506729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1506729</guid><dc:creator><![CDATA[JDieskau]]></dc:creator><pubDate>Sat, 10 May 2008 19:14:27 GMT</pubDate></item></channel></rss>