<?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[[ANFÄNGER] Funktion aus verschiedenen Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin neu hier und ich versuche mich gerade an C++.<br />
Ich bin jetzt an einem Punkt an dem ich nicht mehr weiter weiß,</p>
<pre><code class="language-cpp">/*main.cpp*/

#include &lt;iostream&gt;

using namespace std;

int add(int, int);

int main()
{
    cout &lt;&lt; &quot;Klasse *main.cpp*&quot; &lt;&lt; endl;
    cout &lt;&lt; add(5, 5) &lt;&lt; endl;
    return 0;
}

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

/*test.cpp*/

#include &lt;iostream&gt;

int add(int a, int b)
{
    return a + b;
}
</code></pre>
<p>Das ist mein Programm (besteht aus main.cpp u. test.cpp) wie kann ich dem Compiler jetzt sagen welche Funktion &quot;add&quot; er benutzen soll es gibt ja zwei einmal die aus der test.cpp und einmal die in der main.cpp oder ist sowas nicht möglich in C++ ?</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304892/anfänger-funktion-aus-verschiedenen-klassen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 00:00:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304892.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Jun 2012 11:05:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 11:05:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin neu hier und ich versuche mich gerade an C++.<br />
Ich bin jetzt an einem Punkt an dem ich nicht mehr weiter weiß,</p>
<pre><code class="language-cpp">/*main.cpp*/

#include &lt;iostream&gt;

using namespace std;

int add(int, int);

int main()
{
    cout &lt;&lt; &quot;Klasse *main.cpp*&quot; &lt;&lt; endl;
    cout &lt;&lt; add(5, 5) &lt;&lt; endl;
    return 0;
}

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

/*test.cpp*/

#include &lt;iostream&gt;

int add(int a, int b)
{
    return a + b;
}
</code></pre>
<p>Das ist mein Programm (besteht aus main.cpp u. test.cpp) wie kann ich dem Compiler jetzt sagen welche Funktion &quot;add&quot; er benutzen soll es gibt ja zwei einmal die aus der test.cpp und einmal die in der main.cpp oder ist sowas nicht möglich in C++ ?</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223842</guid><dc:creator><![CDATA[ThePixel5D]]></dc:creator><pubDate>Sat, 16 Jun 2012 11:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 11:13:11 GMT]]></title><description><![CDATA[<p>Sofern du die nicht in unterschiedliche Namespaces packst, ist das nicht möglich, da die Funktionsparameter jeweils vom gleichen Typ sind. Wären sie unterschiedlich, würde die zum Funktionsaufruf passende Funktion gewählt. Das Programm ist in diesem Zustand ungültig, da es zwei widersprechende Definitionen der gleichen Funktion gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223846</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 16 Jun 2012 11:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 11:40:59 GMT]]></title><description><![CDATA[<p>Übrigens hat das Ganze mit Klassen nichts zu tun, main.cpp ist keine Klasse!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223858</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 16 Jun 2012 11:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 11:47:03 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Übrigens hat das Ganze mit Klassen nichts zu tun, main.cpp ist keine Klasse!</p>
</blockquote>
<p>Wenn du aus der Java-Sparte kommste: Hier in C++ gibt es keine Abbildung von Klassen auf Dateien wie in Java. Hier herrscht Anarchie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /> !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223865</guid><dc:creator><![CDATA[PhilippHToner]]></dc:creator><pubDate>Sat, 16 Jun 2012 11:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 12:55:55 GMT]]></title><description><![CDATA[<p><code>test.cpp</code> ist völlig nutzlos, da du keinen Header zur Verfügung stellst der die Funktion deklariert und anschließend in main.cpp eingebunden werden kann.<br />
Folgend musst du folgendes tun:</p>
<ul>
<li>Eine Datei test.hxx erstellen, und Zeile 7 (also die Deklaration von add) dort hineinkopieren. Include-Guards nicht vergessen.</li>
<li>In der main.cpp direkt unter #include &lt;iostream&gt; #include &quot;test.hxx&quot; einfügen.</li>
<li>Die Definition von add in der main.cpp (hinter der main()) löschen.</li>
</ul>
<p>Am Ende sieht das ganze dann so aus:</p>
<p><strong>main.cpp:</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;test.hxx&quot;

int main()
{
    std::cout &lt;&lt; &quot;Klasse *main.cpp*&quot; &lt;&lt; '\n';
    std::cout &lt;&lt; add(5, 5) &lt;&lt; '\n';
}//Die main()-Funktion gibt in C++ automatisch 0 zurück, wenn nichts anderes zurückgegeben wird
</code></pre>
<p><strong>test.hxx:</strong></p>
<pre><code class="language-cpp">#ifndef _Test_hxx_
#define _Test_hxx_

int add(int, int);

#endif//_Test_hxx_
</code></pre>
<p><strong>test.cpp:</strong></p>
<pre><code class="language-cpp">#include &quot;test.hxx&quot;

int add(int a, int b)
{
    return a + b;
}
</code></pre>
<p>Du kannst, wenn du willst, auch die Funktion gleich im Header definieren (hier brauchst du dann auch nicht inlinen).<br />
Kannst auch als Übung 'ne Template-Funktion daraus machen <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/2223890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223890</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 16 Jun 2012 12:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 13:09:22 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p><code>test.cpp</code> ist völlig nutzlos, da du keinen Header zur Verfügung stellst der die Funktion deklariert und anschließend in main.cpp eingebunden werden kann.</p>
</blockquote>
<p>Er braucht keinen Header, weil er in der main.cpp eine Deklaration von add hat.</p>
<blockquote>
<p>wie kann ich dem Compiler jetzt sagen welche Funktion &quot;add&quot; er benutzen soll es gibt ja zwei einmal die aus der test.cpp und einmal die in der main.cpp oder ist sowas nicht möglich in C++ ?</p>
</blockquote>
<p>So in der Form ist das nicht möglich. Du könntest aber die add aus der main.cpp herausnehmen und in eine anderen Übersetzungseinheit schieben, und dann den Linker entweder anweisen, die eine oder die andere Objektdatei einzubinden. Wie das geht ist natürlich compilerspezifisch, und wie man das am geschicktesten anstellt, weiß ich auch nicht. Musst ein bisschen mit make rumpfriemeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223892</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 16 Jun 2012 13:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 14:02:57 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p><code>test.cpp</code> ist völlig nutzlos, da du keinen Header zur Verfügung stellst der die Funktion deklariert und anschließend in main.cpp eingebunden werden kann.</p>
</blockquote>
<p>Er braucht keinen Header, weil er in der main.cpp eine Deklaration von add hat.</p>
</blockquote>
<p>Ja, hast Recht - aber es ist trotzdem schöner das in einen Header zu packen. Gerade dann wenn er vielleicht irgendwann mal die Funktion in verschiedenen Übersetzungseinheiten nutzen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223896</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 16 Jun 2012 14:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 14:16:55 GMT]]></title><description><![CDATA[<p>ThePixel5D schrieb:</p>
<blockquote>
<p>ich bin neu hier und ich versuche mich gerade an C++.<br />
Ich bin jetzt an einem Punkt an dem ich nicht mehr weiter weiß,</p>
<pre><code class="language-cpp">/*main.cpp*/

#include &lt;iostream&gt;

using namespace std;

int add(int, int);

int main()
{
    cout &lt;&lt; &quot;Klasse *main.cpp*&quot; &lt;&lt; endl;
    cout &lt;&lt; add(5, 5) &lt;&lt; endl;
    return 0;
}

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

/*test.cpp*/

#include &lt;iostream&gt;

int add(int a, int b)
{
    return a + b;
}
</code></pre>
<p>Das ist mein Programm (besteht aus main.cpp u. test.cpp) wie kann ich dem Compiler jetzt sagen welche Funktion &quot;add&quot; er benutzen soll es gibt ja zwei einmal die aus der test.cpp und einmal die in der main.cpp oder ist sowas nicht möglich in C++?</p>
</blockquote>
<p>Wenn du beide Dateien kompilierst und linken willst, wird der Linker das mit einer Fehlermeldung quittieren; denn du verletzt hier die &quot;one definition rule&quot; auf eine Art, die vom Linker leicht festzustellen ist.</p>
<p>Schau in deinem C++ Buch folgende Dinge nach:<br />
- internal vs. external Linkage (deutsch: interne/externe Bindung)<br />
- ODR, one definition rule (deutsch: &quot;Eine-Definition-Regel&quot;?)<br />
- das Konzept der &quot;getrennten Übersetzung&quot;</p>
<p>Kurz gesagt: In einem Programm darf eine bestimmte Funktion nur einmal definiert werden (ausgenommen inline-Funktionen und Funktionstemplates). Hier hast du ::add vom Typ int(int,int) zweimal definiert.</p>
<p>Möchtest du etwas bestimmtes erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223899</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 16 Jun 2012 14:16:55 GMT</pubDate></item><item><title><![CDATA[Reply to [ANFÄNGER] Funktion aus verschiedenen Klassen on Sat, 16 Jun 2012 14:55:50 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Möchtest du etwas bestimmtes erreichen?</p>
</blockquote>
<p>Ich hätte auf Stub-Funktionen zum Testen getippt. Man tauscht zur Linkzeit die Implementationen bestimmter Funktionen aus, die von der zu testenden Funktion benutzt werden. Vielleicht hab ich mich vom Namen &quot;test.cpp&quot; täuschen lassen, auf den zweiten Blick bin ich mir da gar nicht mehr so sicher...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223915</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sat, 16 Jun 2012 14:55:50 GMT</pubDate></item></channel></rss>