<?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[Ansammlung von Funktionen in header Datei?]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie macht ihr das eigentlich immer?</p>
<p>ich will viele Funktionen in einer Datei schieben so dass ich nur noch #include hinschreiben muss, damit die Funktionen in main und in anderen Klassen alle funktionieren. sowas wie math.c und andere module</p>
<p>zuerst hab ich einfach ein paar Funktionen in header-datei geschrieben, dann in main-datei #include davon gemacht somit kann man in dieser datei diese funktionen abrufen - es funktioniert. sobald ich in irgendwelchen Klassen in anderen header-Dateien dasselbe includiere, kollidiert es.</p>
<p>ich hab die Funktion dann mit dem schlüsselwort static deklariert und compilerfehler verschwindet.</p>
<p>aber dann bekomme ich andere seltsame Probleme, dass diese Funktionen in klassendateien scheinbar keine Ergebnisse zurückliefern. (pointer bei return zeigt immer noch auf null) nur in main funktioniert</p>
<p>wie macht ihr das normalerweise?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200499/ansammlung-von-funktionen-in-header-datei</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 03:09:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200499.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Dec 2007 20:49:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sat, 15 Dec 2007 20:49:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wie macht ihr das eigentlich immer?</p>
<p>ich will viele Funktionen in einer Datei schieben so dass ich nur noch #include hinschreiben muss, damit die Funktionen in main und in anderen Klassen alle funktionieren. sowas wie math.c und andere module</p>
<p>zuerst hab ich einfach ein paar Funktionen in header-datei geschrieben, dann in main-datei #include davon gemacht somit kann man in dieser datei diese funktionen abrufen - es funktioniert. sobald ich in irgendwelchen Klassen in anderen header-Dateien dasselbe includiere, kollidiert es.</p>
<p>ich hab die Funktion dann mit dem schlüsselwort static deklariert und compilerfehler verschwindet.</p>
<p>aber dann bekomme ich andere seltsame Probleme, dass diese Funktionen in klassendateien scheinbar keine Ergebnisse zurückliefern. (pointer bei return zeigt immer noch auf null) nur in main funktioniert</p>
<p>wie macht ihr das normalerweise?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421128</guid><dc:creator><![CDATA[zenturio13]]></dc:creator><pubDate>Sat, 15 Dec 2007 20:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sat, 15 Dec 2007 21:07:47 GMT]]></title><description><![CDATA[<p>zenturio13 schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>wie macht ihr das eigentlich immer?</p>
<p>ich will viele Funktionen in einer Datei schieben so dass ich nur noch #include hinschreiben muss, damit die Funktionen in main und in anderen Klassen alle funktionieren. sowas wie math.c und andere module...</p>
</blockquote>
<p>1. Grundsätzlich vermeide ich zu große Headerdateien. Es mag zwar bequem sein nur einen Header zu inkludieren, aber eine logische Trennung macht es lesbarer.<br />
2. Strikte Trennung von Deklaration (.h) und Definition (.cpp) - Ausnahmen sind ausschließlich Templates<br />
3. Includeguards berücksichtigen<br />
4. Möglichst wenige Abhängigkeiten in Headern (ggf. Vorwärtsdeklarationen)<br />
...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421142</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 15 Dec 2007 21:07:47 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sat, 15 Dec 2007 22:23:12 GMT]]></title><description><![CDATA[<p>includeguards habe ich gemacht</p>
<p>das sind diese #ifndefine _BLAH_ oder?</p>
<p>ja wie soll das aussehen? ich schreibe nur funktionen ohne klassen</p>
<p>in header:<br />
void fkn(int irgendwas);</p>
<p>in cpp</p>
<p>void fkn(int irgenwas) {...}</p>
<p>so? ich bemerkte dass ich static wieder weglassen kann. komisch?</p>
<p>nur die funktion liefert immer noch kein ergebnis zurück wenn ich sie in der klasse ausführe. nur wenn ich den gesamten code der funktion in die klasse kopiere, gehts wieder. das macht mit der ansammlung von funktionen aber keinen sinn !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421167</guid><dc:creator><![CDATA[zenturio13]]></dc:creator><pubDate>Sat, 15 Dec 2007 22:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sat, 15 Dec 2007 22:25:51 GMT]]></title><description><![CDATA[<p>achso in diesem beispiel habe ich void angegeben. natürlich sind die funktionen nicht mit void sondern mit</p>
<pre><code class="language-cpp">SDL_Surface *load_image(std::string filename)
{...
return optimizedImage
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1421168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421168</guid><dc:creator><![CDATA[zenturio13]]></dc:creator><pubDate>Sat, 15 Dec 2007 22:25:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sun, 16 Dec 2007 08:57:54 GMT]]></title><description><![CDATA[<blockquote>
<p>das sind diese #ifndefine _BLAH_ oder?</p>
<p>ja wie soll das aussehen? ich schreibe nur funktionen ohne klassen</p>
</blockquote>
<p>Eigtl. sind Namen mit _ dem Compiler zugeordnet. Von d.h. sollte man sie nicht nutzen.</p>
<pre><code class="language-cpp">#if !defined(FOO_HPP__INCLUDED)
#define FOO_HPP__INCLUDED

// ...

#endif // FOO_HPP__INCLUDED
</code></pre>
<p>--- für Microsoft Compiler kann man noch #pragma once nehmen. Hat seine Vorteile ... (such mal im Forum danach).</p>
<pre><code class="language-cpp">#if (_MSC_VER &gt;= 1300)
#pragma once
#endif // (_MSC_VER &gt;= 1300)
</code></pre>
<p>...</p>
<p>Zu deiner Funktion:</p>
<pre><code class="language-cpp">SDL_Surface* load_image(std::string const&amp; file_name)
{...
    return optimizedImage
}
</code></pre>
<p>nimm konstante Referenzen bei der Parameterübergabe. Dann wird am Ausgangsobjekt nix verändert und du kopierst nicht erst das Objekt, bevor du es nutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421252</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 16 Dec 2007 08:57:54 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sun, 16 Dec 2007 09:21:04 GMT]]></title><description><![CDATA[<p>zenturio13 schrieb:</p>
<blockquote>
<p>includeguards habe ich gemacht</p>
<p>das sind diese #ifndefine _BLAH_ oder?</p>
<p>ja wie soll das aussehen? ich schreibe nur funktionen ohne klassen...</p>
</blockquote>
<p>Ich mache dir aber mal ein kurzes Beispiel für eine Trennung:</p>
<p>funk.h</p>
<pre><code class="language-cpp">#if !defined(FUNK_HEADER)
#define FUNK_HEADER

namespace MyProject
{
    int add(int a, int b);
    int sub(int a, int b);
}

#endif
</code></pre>
<p>funk.cpp</p>
<pre><code class="language-cpp">#include &quot;funk.h&quot;

namespace MyProject
{
    int add(int a, int b)
    {
        return a+b;
    }

    int sub(int a, int b)
    {
        return a-b;
    }
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;funk.h&quot;

int main()
{
    std::cout &lt;&lt; &quot;2+4=&quot; &lt;&lt; MyProject::add(2, 4) &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;2-4=&quot; &lt;&lt; MyProject::sub(2, 4) &lt;&lt; std::endl;
}
</code></pre>
<p>Dieses Beispiel zeigt dir auch das die Funktionen Werte zurückliefern. Wunder dich nicht über den Namespace, ich verwende eigentlich grundsätzlich Namensräume (und die Schreibweise #if !defined(...) ziehe ich #ifndef ... vor, da sie IMHO aussagekräftiger ist und eher C++ entspricht).</p>
<p>zenturio13 schrieb:</p>
<blockquote>
<p>so? ich bemerkte dass ich static wieder weglassen kann. komisch?</p>
</blockquote>
<p>Wieso komisch? Wenn ich Funktionen ausschließlich im Header implementiere, so weist mich mein Compiler auch über Codedublikate hin, sofern ich den Header an mehreren Stellen includiere.</p>
<p>zenturio13 schrieb:</p>
<blockquote>
<p>nur die funktion liefert immer noch kein ergebnis zurück wenn ich sie in der klasse ausführe. nur wenn ich den gesamten code der funktion in die klasse kopiere, gehts wieder. das macht mit der ansammlung von funktionen aber keinen sinn !</p>
</blockquote>
<p>Also deine Fehlerbeschreibung hat meines Erachtens nichts mit der Trennung in Funktionen zu tun, da liegt eher ein Fehler in den Funktionen oder Klassen selber vor. Wenn du mein Minibeispiel ausprobierst wirst du auch sehen das es Ergebnisse liefert.</p>
<p>Aber davon mal abgesehen:</p>
<p>zenturio13 schrieb:</p>
<blockquote>
<p>SDL_Surface *load_image(std::string filename)</p>
</blockquote>
<p>So eine Funktion entfinde ich schon problematisch:</p>
<p>1. Wie ist die Speicherstrategie? Mit new, mit free, oder ist es gar ein Zeiger auf eine statische Variable? Anhand der Funktion sieht man ihr das nicht an.<br />
2. Objekte sollte man nie &quot;by value&quot; übergeben, lieber als konstante Referenz.</p>
<p>Mögliche Alternative (mit boost):</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;boost/shared_ptr.hpp&gt;

boost::shared_ptr&lt;SDL_Surface&gt; load_image(const std::string&amp; filename) ...
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421255</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 16 Dec 2007 09:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sun, 16 Dec 2007 14:02:30 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>2. Strikte Trennung von Deklaration (.h) und Definition (.cpp) - Ausnahmen sind ausschließlich Templates</p>
</blockquote>
<p>ausnahmen sind *klassen*. du meintest wohl die trennung zur implementation.<br />
eine klassendefinition ist bereits ohne implementation eine definition, d.h. zweimal in der selben übersetzungseinheit definieren, verstößt gegen die ODR. klassendeklarationen (forward declaration) und funktionsdeklarationen kann man so beliebig oft wie gewünscht einführen, dafür sind include guards gar nicht nötig. (in deinem (asc) letzten codebeispiel ist das zum beispiel so) - heißt natürlich nicht, dass man auf include-guards verzichten soll.</p>
<p>@OP: static in diesem kontext ersetzt man durch &quot;unnamed namespaces&quot;, um die sichtbarkeit der variable/funktion auf die aktuelle übersetzungseinheit zu beschränken. nicht, dass es dann funktioniert; aber du solltest dir ergooglen, was static hier bedeutet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421370</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Sun, 16 Dec 2007 14:02:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Sun, 16 Dec 2007 19:26:10 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>2. Strikte Trennung von Deklaration (.h) und Definition (.cpp) - Ausnahmen sind ausschließlich Templates</p>
</blockquote>
<p>ausnahmen sind *klassen*. du meintest wohl die trennung zur implementation.</p>
</blockquote>
<p>Nein, ich meine was ich sage: Deklaration (dazu gehören auch Klassen<strong>deklarationen</strong>) und Definition )Implementierung). Mag sein das ich 10 Jahre lang falsche C++ Bezeichnungen verwende (und diese auch so gelernt habe).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1421581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1421581</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 16 Dec 2007 19:26:10 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 07:26:12 GMT]]></title><description><![CDATA[<p>Hab grad den Thread hier gefunden, und mich wundert hier, dass folgendes funktionieren soll:</p>
<p>faq.h</p>
<pre><code>int addiere(int a,int b)
{
   return (a+b);   
}
</code></pre>
<p>limp.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;faq.h&quot;
using namespace std;
int main(void)
{
   addiere(4,5);
   system(&quot;Pause&quot;);
}
</code></pre>
<p>Er findet nämilch die Funktion 'addiere' nicht. (Addiere ist ja auch schon definition)</p>
<p>Zudem wundert mich, dass Klassendefinition nicht in Headerdateien gehört.<br />
Weil eine Deklaration wäre ja:</p>
<pre><code>class hallo;
</code></pre>
<p>und eine Definition schon:</p>
<pre><code>class hallo
{
   private:
      int a;´
};
</code></pre>
<p>Und die Definition steht bei mir immer in den Headern- das haben wir sogar in der Schule gelernt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422935</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Wed, 19 Dec 2007 07:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 07:32:08 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Hab grad den Thread hier gefunden, und mich wundert hier, dass folgendes funktionieren soll:</p>
<p>faq.h</p>
<pre><code>int addiere(int a,int b)
{
   return (a+b);   
}
</code></pre>
<p>limp.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;faq.h&quot;
using namespace std;
int main(void)
{
   addiere(4,5);
   system(&quot;Pause&quot;);
}
</code></pre>
<p>Er findet nämilch die Funktion 'addiere' nicht. (Addiere ist ja auch schon definition)</p>
</blockquote>
<p>Wieso sollte er die Funktion nicht finden? Eine Definition ist auch immer eine Deklaration (umgekehrt nicht). Der Linker könnte höchstens Probleme bekommen, wenn er mehrere Dateien zusammenfassen soll, die alle die &quot;faq.h&quot; eingebunden haben - dann hat er plötzlich mehrere Definitionen, unter denen er auswählen kann.</p>
<blockquote>
<p>Zudem wundert mich, dass Klassendefinition nicht in Headerdateien gehört.<br />
Weil eine Deklaration wäre ja:</p>
<pre><code>class hallo;
</code></pre>
<p>und eine Definition schon:</p>
<pre><code>class hallo
{
   private:
      int a;
};
</code></pre>
<p>Und die Definition steht bei mir immer in den Headern- das haben wir sogar in der Schule gelernt.</p>
</blockquote>
<p>Das sind beides Deklarationen (das erste eine Forward-Deklaration der Klasse, das zweite deklariert deren Member - die Definition geschieht später (statische Member und Methoden mußt du nochmal explizit angeben, normale Member werden implizit definiert, wenn du ein Objekt dieser Klasse anlegst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422938</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Dec 2007 07:32:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 07:39:59 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Hab grad den Thread hier gefunden, und mich wundert hier, dass folgendes funktionieren soll:</p>
<p>faq.h</p>
<pre><code>int addiere(int a,int b)
{
   return (a+b);   
}
</code></pre>
<p>limp.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;faq.h&quot;
using namespace std;
int main(void)
{
   addiere(4,5);
   system(&quot;Pause&quot;);
}
</code></pre>
</blockquote>
<p>warum sollte das nicht funktionieren? warum sollte er die definition nicht finden? nach dem durchgang des präprozessors sieht deine datei so aus:</p>
<pre><code class="language-cpp">/* was immer in iostream steht */
int addiere(int a,int b)
{
   return (a+b);   
}

using namespace std;
int main(void)
{
   addiere(4,5);
   system(&quot;Pause&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1422940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422940</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 19 Dec 2007 07:39:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 07:55:55 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<blockquote>
<p>Zudem wundert mich, dass Klassendefinition nicht in Headerdateien gehört.<br />
Weil eine Deklaration wäre ja:</p>
<pre><code>class hallo;
</code></pre>
<p>und eine Definition schon:</p>
<pre><code>class hallo
{
   private:
      int a;
};
</code></pre>
<p>Und die Definition steht bei mir immer in den Headern- das haben wir sogar in der Schule gelernt.</p>
</blockquote>
<p>Das sind beides Deklarationen (das erste eine Forward-Deklaration der Klasse, das zweite deklariert deren Member - die Definition geschieht später (statische Member und Methoden mußt du nochmal explizit angeben, normale Member werden implizit definiert, wenn du ein Objekt dieser Klasse anlegst).</p>
</blockquote>
<p>das ist eine definition. und auch für die member der klassen kann man das definition nennen (wie es der standard auch tut, und nicht bloß deklaration). nur statische member werden in einer klassendefinition bloß deklariert und müssen danach (nicht nochmal, sondern zum ersten mal) definiert werden. dein erstes beispiel <code>class X;</code> muss noch nichtmal eine forward-deklaration sein, es kann auch einfach eine redeklaration einer bereits definierten klasse sein.</p>
<p>regel: eine deklaration _ist_ eine definition, außer (unter anderem) sie deklariert eine statische elementvariable (siehe v.a.: 3.1/2 und 3, 9.1., zu statischen membern: 9.4.2/2)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422946</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 19 Dec 2007 07:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 09:17:59 GMT]]></title><description><![CDATA[<p>irgendwie hat mich das jetzt etwas durcheinander gebracht^^</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-61231.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-61231.html</a></p>
<p>Dort wird ganz klar gesagt, dass Deklarieren nur heisst einen bestimmten Namen in einem Scope zu reservieren.</p>
<pre><code>extern int a;

void foo(int);

class hallo;
</code></pre>
<p>Oder etwas in der Richtung.</p>
<p>Definieren heisst, dass der Compiler speicher belegt.<br />
Also welche der Aussagen stimmt jetzt?^^</p>
<pre><code>class hallo 
{ 
   private: 
      int a; 
};
</code></pre>
<p>Belegt ja in dem Sinne auch noch keinen Speicher sondern gibt nur die Namen der Member der Klasse bekannt.<br />
Also kann letztriger Codeschnipsel doch in die Header &lt;-- Ist also eine klare <strong>DEKLARATION</strong>?<br />
Doch was käme dann von der Klasse 'hallo' noch in die <em><strong>ausgelagerte</strong></em> Cpp?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1422992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1422992</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Wed, 19 Dec 2007 09:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 09:24:00 GMT]]></title><description><![CDATA[<p>Ja, das kann schonmal zu Verwirrungen führen. Die Klassendefinition gehört in den Header (aus technischer Sicht würde ich das auch als Deklaration ansehen), in die CPP gehört die Definition der statischen Member und Methoden (die bei dieser Klasse nicht existieren):</p>
<pre><code class="language-cpp">//Klassen-Definition - gehört in den Header
class test
{
  int i;
  static int s;
public:
  void print();
};

//Member-Definitionen - gehören in die CPP
int test::s;

void test::print()
{
  cout&lt;&lt;s&lt;&lt;&quot; &quot;&lt;&lt;i&lt;&lt;endl;
}

//test::i muß nicht gesondert definiert werden - das lebt innerhalb der 'test'-Objekte, die du irgendwo im Programm anlegen kannst
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1423001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423001</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Dec 2007 09:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 10:01:44 GMT]]></title><description><![CDATA[<p>Das wiederum würde aber auch bedeuten, dass alle Elementfunktionen ausgelagert werden müssen.<br />
Also sollte KEINE davon innerhalb der Klasse definiert werden, wie man es auch häufig im Netz sieht.<br />
Sondern immer mit dem Zugehörigkeitsoperator in eine andere Datei - die Cpp-Datei?</p>
<p>Also wäre die Regel auch:</p>
<p><strong>Keine Elementfunktionen innerhalb der Klasse definieren.</strong></p>
<p>?^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423016</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Wed, 19 Dec 2007 10:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 10:05:57 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Also wäre die Regel auch:</p>
<p><strong>Keine Elementfunktionen innerhalb der Klasse definieren.</strong></p>
<p>?^^</p>
</blockquote>
<p>Nicht ganz - inline Funktionen dürfen (und müssen) im Header definiert werden (weil der Compiler den Quelltext benötigt, um sie inline ersetzen zu können). Und Methoden, die direkt in der Klassendefinition definiert werden, gelten automatisch als inline.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423020</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 19 Dec 2007 10:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 10:09:16 GMT]]></title><description><![CDATA[<p>Also dürfen in den Header nur Deklarationen, mit großer Ausnahme von Inlinefunktionen? <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="😉"
    /><br />
Okay... super- ich denk ich habs verstanden xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423023</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Wed, 19 Dec 2007 10:09:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Wed, 19 Dec 2007 11:02:19 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Definieren heisst, dass der Compiler speicher belegt.</p>
</blockquote>
<p>vielleicht könnte man diesen punkt genauer herausarbeiten als: definieren heißt, das an der stelle der definition dem compiler bekannt gemacht wird, wieviel speicher er für eine gewisse entität bereit stellen soll - was nicht heißt, dass er das auch machen muss. ein schönes beispiel dafür sind klassendefinitionen, ein anderes compiletime-konstanten, für die auch nur bei bedarf speicher reserviert wird. (wobei man sich da natürlich auf dünnem eis bewegt, der standard definiert definition als eine deklaration, bei der gewisse bedingungen nicht gegeben sind)</p>
<p>und um dich nochmal zu verwirren, du kannst in einem header auch &quot;normale&quot; definitionen haben, ohne je probleme beim kompilieren oder linken zu bekommen, z.b.</p>
<pre><code class="language-cpp">namespace { int i; }
const int x = 42;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1423052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423052</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 19 Dec 2007 11:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Thu, 20 Dec 2007 07:20:03 GMT]]></title><description><![CDATA[<p>Was man kann und was man soll ist ja nochmal ein Unterschied.<br />
Es geht mir ja darum zu lernen, was man sollte.<br />
Und wenns besserer oder übersichtlicherer Programmierstil ist in die Header nur Deklarationen zu schreiben- so mach ich das <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/1423556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423556</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Thu, 20 Dec 2007 07:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Thu, 20 Dec 2007 07:24:30 GMT]]></title><description><![CDATA[<p>damit wollte ich nur sagen, dass es sehr wohl auch ausnahmen geben kann. die integralkonstante ist ein gutes beispiel dafür. in den header oder nicht? nein? was ist mit enums?</p>
<p>wichtig ist, die ODR zu kennen und zu wissen, was übersetzungseinheiten sind - und dass der präprozessor nur eine einfache textersetzungsmaschine ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423558</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 20 Dec 2007 07:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ansammlung von Funktionen in header Datei? on Thu, 20 Dec 2007 07:30:25 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>und um dich nochmal zu verwirren, du kannst in einem header auch &quot;normale&quot; definitionen haben, ohne je probleme beim kompilieren oder linken zu bekommen, z.b.</p>
<pre><code class="language-cpp">namespace { int i; }
const int x = 42;
</code></pre>
</blockquote>
<p>Ja, absolut legal - und die Quelle von Verwirrungen sowohl für dich als auch für andere. (gerade beim ersteren hast du das Problem, daß jede ÜE ihre eigene Version von i bekommt (und du am Ende eine Ewigkeit auf der Suche nach dem Fehler verbringst)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13375">@777</a>: Wichtig ist vor allem, daß du (a) die Regeln der Sprache (hier vor allem die ODR) einhältst und (b) sauber programmierst.</p>
<p>Die ODR verbietet es, daß <strong>ein</strong> Objekt mehrfach im Programm definiert wird. Klassendefinitionen fallen nicht unter die strenge Auslegung der ODR, weil Klassen keine vollwertigen Objekte sind (sondern nur ein Bauplan für Objekte), inline-Funktionen und Templates werden vom Compiler und Linker gesondert behandelt.<br />
(btw, statische Variablen und anonyme namespaces bleiben lokal in ihrer Übersetzungseinheit - damit stören sie den Linker ebenfalls nicht).</p>
<p>Zur sauberen Programmierung gehört es unter anderem, globale Variablen zu vermeiden - und auch sauber zwischen Schnittstelle (Deklarationen etc. im Header) und Implementation (in einem eigenen CPP) zu trennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1423559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1423559</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 20 Dec 2007 07:30:25 GMT</pubDate></item></channel></rss>